Bullet その9 トリガーボックス

今回は、剛体をトリガーオブジェクトとして扱う方法を載せます。

剛体の生成方法は、その1その2その3を参考にしてください。

まずは、トリガーオブジェクトとして使うには、物体が固定されていて、ほかのオブジェクトと接触しないようにします。

float mass = 0.0f; //0を指定すると静的オブジェクトになる。
btRigidBody::btRigidBodyConstructionInfo info( mass, ... );
btRigidBody* body = new btRigidBody( info );

// 接触応答をしないようにする。
body->setCollisionFlags( body->getCollisionFlags() | btCollisionObject::CF_NO_CONTACT_RESPONSE );
// 上記のmassに0を指定する方法とは別に以下の方法でも静的オブジェクトに出来ます。
body->setCollisionFlags( body->getCollisionFlags() | btCollisionObject::CF_NO_CONTACT_RESPONSE );

これで準備は完了です。

つぎに、トリガーオブジェクトに接触したかを調べる方法です。

extern ContactProcessedCallback gContactProcessedCallback;

// 関数宣言 
bool ContactCallback( btManifoldPoint& manifold, void* object0, void* object1 );

// Bulletの関数ポインタに設定する
gContactProcessedCallback = ContactCallback;

bool ContactCallback( btManifoldPoint& manifold, void* object0, void* object1 )
{
 //この中に個別の処理を書く
}

gContactProcessedCallback には全ての接触イベントが入ってくるので個別に識別するために 

void body->setUserPointer( void* userPointer );
void* body->getUerPointer() const; 

を使う必要があります。

Bullet にはトリガーイベントを制御するためのインターフェースなどがないみたいなのでこのような少し面倒な方法になります。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2011年02月28日 13:55
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。