PythonによるOpen Dynamics Engine講座 その5
例の如くサンプルプログラムはここにあります。今回はPyOpenGLとPyODEを組み合わせて落ちる球を描画します。
まず、最初のworld = ode.World()、apple = ode.Body(world)とinit_GL()内のcreate_sphere()で動力学計算の世界の生成、重力の設定、剛体の生成、剛体の質量の設定、剛体の位置の設定をやってます。
apple.MASS、apple.sphereRadiusですが、これらは僕が勝手に付け加えたメンバでode.Bodyで定義されてあるメンバではありません。これはC言語ではできないはずです。こうすることでappleは質量と半径のデータを持つことができます。
次にOpenGLの設定をなんやかんややって、あとはglutMainLoop ()です。
動力学世界の更新は_idlefunc()でやってます。
t = dt - (time.time() - lasttime)
if (t > 0):
time.sleep(t)
は前回の更新からかかった時間がサンプリングタイムdt以下のときはその分待つという意味です。
こうすることで、設定したサンプリングタイム以上のスピードで描画されることはなくなります。
こうしたあとにworld.step(dt)で動力学世界の更新をします。
あと、draw_body(body)ですが、bodyには剛体appleをいれます。body.getRotation()は剛体の姿勢を取得します。あとはglutSolidSphere(body.sphereRadius,16,16)で球を描画します。
次回は地面との衝突をやります。
PythonによるOpen Dynamics Engine講座に戻る