はじめに

物理エンジン「Bullet」の利用方法についてのメモです

Bulletについて

Bulletとは

オープンソースの物理エンジンです。
Zlibライセンス
FKと同じ右手座標系を用いています。

公式HP

日本語マニュアル

利用準備

Bullet配布ページ

CMake配布ページ

ソースコードの配布なのでビルドの必要あり
Cmakeを使う必要あり?
Cmake→VisualStudio用のソリューションファイル→VSでコンパイル

プロジェクトの設定

利用したい機能の種類によって設定が変わります

  • すべての機能を利用する場合
    • インクルードするヘッダファイル
      btBulletDynamicsCommomn.h
    • インクルードパス
      Bullet/srcフォルダ
    • リンクするライブラリ
      BulletDynamics,BulletCollision,LinearMath

  • コリジョン判定のみ利用する場合
    • インクルードするヘッダファイル
      btBulletCollisionCommon.h
    • インクルードパス
      Bullet/srcフォルダ
    • リンクするライブラリ
      BulletCollision,LinearMath

  • 最近傍点計算のみ利用する場合
    • Demos/ConvexHullDistanceを参照

Tips

物理エンジンを利用する利点と欠点

  • 利点
    • 自分で実装するよりも高速なことが多い
    • 様々な機能がそれなりに揃っている
    • 衝突判定や力積計算のコードを書く必要がなくなる
  • 欠点
    • ライブラリの利用法を学ぶ必要がある
    • ライブラリの使用法を間違えたことによる分かりづらいエラーが出ることがある
    • 論文を書くときに内部での処理方法がわからないことがある
    • 痒いところに手が届かないことがある。自力での拡張が必要なことがある

実際に利用した感想

  • 衝突判定を書かなくていいのですごく楽
  • でも論文書くときには摩擦,垂直抗力の式が分からなくてぐぬぬぬぬ
  • 点群同士の衝突など,正直に書くと総当り方式になるところをちゃんと高速化してくれる
  • でもGPGPUは専用の実装使わないとダメっぽい(GPGPU計算の布とかクラスがある)
  • パラメータの設定の仕方がわかりにくいことがある(摩擦とか)
  • パラメータの取得の仕方もわかりにくい事がある(重さとか)
  • ブラックボックスは困るけど実装の容易さと速度は◎

大体の構造

  • btDiscreteDinamicsWorld
    Bulletでの物理現象を扱う世界そのもの。
    ここに「登録された」物体の物理挙動が計算される。
    インスタンス生成時に、衝突判定に使うルールなどを設定する必要がある。
    BroadPhaseは衝突が起こりうる組み合わせかを大雑把に計算。
    Dispatcherは正確な衝突判定(衝突位置やめり込みの深さ等)を計算している。
  • btRigidBody
    Bulletでの剛体。
    物体の重量や座標、形状などを持っている
  • btCollisionShape
    当たり判定の形状データ。
    大きく分けて凸形状と凹形状がある。
    動く物体は凸形状の組み合わせで表現する必要がある。

メモ

Worldの種類

btTransForm

  • basis

3*3行列

  • origin

位置ベクトル

  • rotation

クォータニオン

CollisionShapeの種類

  • 移動可

プリミティブ形状
btBoxShape, btSphereShape, btCapsuleShape,btCylinderShape,btConeShape

凸形状
btConvexHullShape
(ポリゴンメッシュからの生成も可能。ただし頂点数には注意)

複合体
btCompoundShape
(複数の凸形状を内包。凹型形状も再現可能)

btGimpactTriangleMeshShape

  • 移動不可

平面
btStaticPlaneShape
無限平面(半無限平面?)

ハイトフィールド
btHeightfieldTerrainShape

メッシュ形状(不動。スケール変更可)
btScaledBvhTriangleMeshShape

メッシュ形状(不動)
btBvhTriangleMeshShape


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-02-18 (月) 04:46:52 (1707d)