bambooflow Note

ドミノ倒し

最終更新:

bambooflow

- view
メンバー限定 登録/ログイン

ODEでドミノ倒し



ODEの基本機能を使ってドミノ倒しを作成しました。
遊んでみてください。



  • コマンド操作
  'a' : 牌を置く
  'b' : 球を発射
  'x' : 1つ削除
  'd' : 全削除
  'h' : カーソル左移動
  'j' : カーソル前進
  'k' : カーソル後退
  'l' : カーソル右移動
  'm' : カーソル右回転
  'n' : カーソル左回転
  '+' : カーソル移動距離+
  '-' : カーソル移動距離ー


作成環境


OS:Linux(Ubuntu10.10)
ODE version 0.11.1

ダウンロード


ode_domino01.tgz

使用した主なAPI


  • dWorldCreate
  • dHashSpaceCreate
  • dJointGroupCreate
  • dCreatePlane
  • dWorldSetGravity
  • dBodyCreate
  • dBodySetKinematic - カーソル作成で使用
  • dBodySetPosition
  • dGeomSetBodydGeomSetBody
  • dGeomSetBodydRFromAxisAndAngle
  • dGeomSetBodydGeomSetRotation
  • dGeomSetBodydGeomSetBody
  • dGeomSetOffsetRotation - カーソル作成で使用
  • dGeomSetOffsetPosition - カーソル作成で使用
  • dGeomGetPosition
  • dGeomGetRotation
  • dBodySetAutoDisableFlag - シミュレーション速度確保のため
  • dBodySetAutoDisableLinearThreshold
  • dBodySetAutoDisableAngularThreshold
  • dBodySetAutoDisableSteps
  • dBodyDestroy
  • dGeomDestroy
  • dSpaceCollide
  • dWorldQuickStep
  • dJointGroupEmpty
  • dJointGroupDestroy
  • dAreConnectedExcluding
  • dJointCreateContact
  • dCollide
  • dWorldDestroy
  • dSpaceDestroy
  • dCloseODE


低スペックなマシンのための設定


  • シミュレーションステップの変更
 dWorldQuickStep( world, 0.01f ); // <= 変更

  • AutoDisableの設定
 dBodySetAutoDisableFlag(tile->body, 1);
 dBodySetAutoDisableLinearThreshold(tile->body, 0.3);  // <= 変更
 dBodySetAutoDisableAngularThreshold(tile->body, 0.3);  // <= 変更
 dBodySetAutoDisableSteps(tile->body, 10);

数値は適当です。
この設定ならば私のAtomのNotePCでかろうじて動きます。


まとめ


ドミノ倒しのサンプルは前々から作りたいと思っていたのですが、ようやくできました。
こだわりとしてはカーソルの移動のところ。
以前YoutubeにBulletを使ったドミノ倒しをみて対抗?してみました。


プログラムとしては、簡単な機能しか使っていないです。
工夫としては、衝突において、地面の摩擦を無限、牌同士の衝突を0.1と設定しています。
そうしないとうまく動きません。今回のサンプルの中で、少ないポイントの1つです。

あと、当初、dWorldStepを使って実行していたのですが、ドミノが倒れるごとに実行速度が遅くなってしまって、途中でほとんど動かなくなってしました。
ということでサンプルはdWorldQuickStepを使っています。
それと、AutoDisable機能を使って倒れている牌のみを有効にしてシミュレーション速度を確保してみました。
この機能、ちょっとやっかいでStepサイズが大きい(おおざっぱすぎる)とDisableとなる閾値にうまく入ってくれず、うまく機能してくれない場合があります。うまく動かすのに結構手間かもしれません。

Enjoy!!

タグ:

ODE
記事メニュー
目安箱バナー