ダリアメモ@ブログ

日々思ったことや自分用のメモも含めプログラムの技術を淡々と書いていきます

BulletPhysicsを使ってみて

朝描く時間が有ったので今回は連続投稿。
今回は物理エンジンであるBulletについて書きたいと思います。(現段階で僕が理解してる事を元に書いてます)

そもそもBulletとは?

オープンソース物理エンジン
物理的な判定はもちろん、トリガー判定も可能で、
自分でコールバック処理が書けるので
衝突した際の処理を自由に書けるので自由度が高い。
衝突の形状は立方体や球はもちろん、
自分で複数の形状を合体させて一つの衝突を作る事もできる。
日本語で解説してるサイトも有りますのでURLも貼っておきます。

http://bulletjpn.web.fc2.com/01_Introduction.html


□主に使われているクラス

・btDiscreteDynamicsWorld
剛体クラス(btRigidBody)を管理するクラス。
剛体という字面だけ見ると強そうだが、意味はどんなに力を加えても形が変わらない物体の事らしい。
このクラスに剛体クラスを追加することで衝突判定が行うことが出来る。

・btAlignedObjectArray
登録した剛体の衝突形状(CollisionShape)を管理する可変長配列。
push_backなどC++STLvectorやListに近い気がするが、独自の関数もあるので完全に別のもの。

・btRigidBody
剛体。このクラスをbtDiscreteDynamicsWorldに登録しないと実際に衝突判定が行われないのでとても重要。

他にも必要な変数はありますが、一度設定したらあまり使わないので、
ゲームで使うとなると主に上記の3つの変数を使ってやりとりします。

他にもマスクを使って衝突する相手を限定したり、
Raycastを使って衝突した相手の情報を取得できたりすることが出来るみたいなので、
調べたらまたブログの方に載せようと思います。