はじめに †
物理エンジン「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 †
大体の構造 †
- btDiscreteDinamicsWorld
Bulletでの物理現象を扱う世界そのもの。
ここに「登録された」物体の物理挙動が計算される。
インスタンス生成時に、衝突判定に使うルールなどを設定する必要がある。
BroadPhaseは衝突が起こりうる組み合わせかを大雑把に計算。
Dispatcherは正確な衝突判定(衝突位置やめり込みの深さ等)を計算している。
- btRigidBody
Bulletでの剛体。
物体の重量や座標、形状などを持っている
- btCollisionShape
当たり判定の形状データ。
大きく分けて凸形状と凹形状がある。
動く物体は凸形状の組み合わせで表現する必要がある。
メモ †
Worldの種類 †
btTransForm †
3*3行列
位置ベクトル
クォータニオン
CollisionShapeの種類 †
プリミティブ形状
btBoxShape, btSphereShape, btCapsuleShape,btCylinderShape,btConeShape
凸形状
btConvexHullShape
(ポリゴンメッシュからの生成も可能。ただし頂点数には注意)
複合体
btCompoundShape
(複数の凸形状を内包。凹型形状も再現可能)
btGimpactTriangleMeshShape
平面
btStaticPlaneShape
無限平面(半無限平面?)
ハイトフィールド
btHeightfieldTerrainShape
メッシュ形状(不動。スケール変更可)
btScaledBvhTriangleMeshShape
メッシュ形状(不動)
btBvhTriangleMeshShape