2012-10-24 6 views
5

Czy istnieje sposób, aby ustawić Broadphase Filtr oddzwanianie fizyki Bullet następujące:Bullet Physics Broadphase Filtr oddzwanianie filtrować poszczególne kształty wewnątrz ciała złożonego

złożone dynamiczne organy zbudowane z dwóch kształtach, powiedzmy cylinder i pudełko , gdzie cylindry mogą zderzać się tylko z cylindrami wewnątrz innych dynamicznych ciał, a skrzynie mogą zderzać się tylko z trzecim rodzajem ciała, który jest statyczną kulą. Nie są dozwolone żadne inne kolizje: cylindry z kulami NIE mogą kolidować; Pudełka z pudełka nie może kolidować albo

Poniższy rysunek pokazuje, co mam opisane powyżej

collision-filter

Odpowiedz

3

można zrobić. Oto kod

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

wiesz, czy mogę odzyskać wskaźnik userData w kształcie wewnątrz ciała złożonego, jak ten: btCollisionObject * collisionObject = (btCollisionObject *) proxy0-> m_clientObject; customData * userData = (customData *) collisionObject-> getUserPointer(); – rraallvv

+0

'proxy1-> m_clientObject-> getUserPointer()' To zadziała – Max

+0

hmm ... tak, aby pobrać dane użytkownika z całości, potrzebuję danych użytkownika z dziecka, które faktycznie koliduje ... więc mogę stwierdzić, czy ten kształt może kolidować, czy nie ... może nie ma funkcji w API, aby to zrobić – rraallvv

Powiązane problemy