2012年5月25日金曜日

BulletSharpの衝突設定1

以前、BulletSharpで物理演算を実装したときに、
衝突設定のやり方がわからずに放置していたのを忘れていた。

508リンちゃんのリボン飛びのおかげで思い出せた...

何でやり方がわからないかというと、

物理世界に剛体を追加するメソッドがありまして

public void AddRigidBody(RigidBody body, CollisionFilterGroups group, CollisionFilterGroups mask);

このメソッドの第2,3引数に剛体のグループと非衝突グループの設定を入れるわけですが、
この引数、列挙体なんですよ

[Flags]
public enum CollisionFilterGroups
{
AllFilter = -1,
None = 0,
DefaultFilter = 1,
StaticFilter = 2,
KinematicFilter = 4,
DebrisFilter = 8,
SensorTrigger = 16,
CharacterFilter = 32,
}

PMD,PMXファイルが持っている設定値は0~FFまでの値で
16個のグループに対応するように2進数16桁を10進数にして保持しています。

例えば、
グループ1、非衝突12345とすると

グループ=0000000000000001
非衝突 =1111111111100000

この上下が共に1の場合に衝突が発生する
※と認識しているのですが試せていないので断言できません。

メソッドに戻って、

このようにintを渡す必要があるのに列挙体で0に強制変換されてしまい
どうすればいいんだよって状況に陥ってしまったわけです。

ちなみに呼び出されたメソッド側では
列挙体を(short int)に戻していました。
いったいどういう使い方を想定しているのか...

というわけで今週末はBulletSharpを調べます。

0 件のコメント:

コメントを投稿