2012-10-24 18 views
5

内部の個々の形状をフィルタリングするコールバックをフィルタリングし、次のように弾丸物理学でコールバックをフィルターBroadphaseを設定する方法はあります:2つの形状から構築弾丸物理学Broadphase複合体

化合物ダイナミックボディ、シリンダーと箱を言います他の動的ボディの中のシリンダにのみ衝突することができ、ボックスは第3の種類のボディと衝突することができ、静的な球である。

球はありません。ボックス付きボックスは、どちらか衝突してはいけません

次の画像は、私はあなたがそれを行うことができます

collision-filter

答えて

3

、上述した内容を示しています。ここで私はこのように、複合体の内側形状でのuserdataポインタを取得することができれば、あなたが知っているコード

struct FilterCallback : public btOverlapFilterCallback 
{ 
    virtual bool needBroadphaseCollision(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1) const; 
}; 
// .... 
FilterCallback filterCallback; 
// .... 
m_dynamicsWorld->getPairCache()->setOverlapFilterCallback(filterCallback); 

bool FilterCallback::needBroadphaseCollision(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1) const 
{ 
// return false for pair with no colision 
} 
+0

です:btCollisionObject * collisionObject =(btCollisionObject *)proxy0-> m_clientObject。 customData * userData =(カスタムデータ*)collisionObject-> getUserPointer(); – rraallvv

+0

'proxy1-> m_clientObject-> getUserPointer()' これは動作します – Max

+0

hmm ...はい、すべてのものからuserDataを取得します。実際に衝突している子からuserDataが必要ですその形状が衝突するかどうか...多分APIにはそれを行う機能がありません – rraallvv

関連する問題