ロボットアームのエドの仮想空間と現実空間の視覚が同期できる様になったので、以前から組み込んでみたかった仮想現実に物理法則を組み込んでみた
と言っても、一から物理法則を作成するなんて事を個人で行うのは、とても無理なので、賢い人達の知恵を利用する事にしました
ネットで調べたら、BulletとOpen Dynamics Engineの2つが良さそうな感じなので、比較した結果、Open Dynamics Engineを使用する事にしました
選んだ理由は、とても単純で、ファイルサイズが小さかったからで、
サイズが小さい→機能が少ない→設定が少ない→簡単に使える?って感じで選んでみました

ネットで使い方を調べた結果、以下の様になりました
ただ、描画は、Open Dynamics Engineに付属しているdrawstuffは使用せずに、OpenGLで描画する様にしたので、プログラムで時間を進めて、位置を取得して、OpenGLに渡す形にしました

ODEの初期化する
 dInitODE() → 初期化
 dWorldCreate() → シミュレーション空間作成
 dHashSpaceCreate() → 衝突空間作成
 dWorldSetGravity() → 重力設定
 dCreatePlane() → 地面生成

剛体を作成する
 dBodyCreate() → ボディ作成
 dMassSetSphereTotal() → 球を作成する場合
 dMassSetBoxTotal() → ボックスを作成する場合
 dBodySetMass() → 質量設定
 dGeomSetBody() → ジオメトリ作成
 dBodySetPosition() → 位置設定

時間を進める
 dWorldStep() → 時間経過
 dSpaceCollide() → 衝突確認
 dBodyCopyPosition() → 位置取得

ODEを終了する
 dWorldDestroy();
 dCloseODE();

 

んで、動作させたら、以下の様になりました

f:id:Nov11:20170531020324j:plain


動画は、こんな感じです

youtu.be

まだ設定不足なのか、不思議な動きをしているけど、なかなか良い感じで動いてくれます
(音とか土煙なんかの効果が無いので少し寂しいですが...)
以前、ピタゴラスイッチをやってみたいって思ってたけど、何とかなりそうな予感がしますね


なお、ブログの内容を参照して実行した結果に責任は負いかねますので、ご了承下さい