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


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

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

剛体の生成方法は、その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 にはトリガーイベントを制御するためのインターフェースなどがないみたいなのでこのような少し面倒な方法になります。
ツールボックス

下から選んでください:

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