2012-10-24 10 views
5

C'è un modo per impostare un Broadphase filtro richiamata in Fisica pallottola come seguono: corpi dinamiciProiettile Fisica Broadphase filtro richiamata per filtrare singole forme all'interno di un corpo composto

composto costruito da due forme, per esempio un cilindro e una scatola , dove i cilindri possono solo entrare in collisione con i cilindri all'interno di altri corpi dinamici, e le scatole possono solo scontrarsi con un terzo tipo di corpo, che è una sfera statica

Nessun'altra collisione è consentita: cilindri con sfere, NON devono scontrarsi; scatole con scatole, non deve entrare in collisione sia

L'immagine seguente mostra quello che ho descritto sopra

collision-filter

risposta

3

Si può fare. Ecco il codice

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

si fa a sapere se posso recuperare il puntatore userData in una forma all'interno di un corpo composto, in questo modo: * btCollisionObject collisionObject = (btCollisionObject *) proxy0-> m_clientObject; customData * userData = (customData *) collisionObject-> getUserPointer(); – rraallvv

+0

'proxy1-> m_clientObject-> getUserPointer()' Questo funzionerà – Max

+0

hmm ... sì che recupera i dati utente dall'intera cosa, ho bisogno degli userData del bambino che sta effettivamente scontrandosi ... quindi posso dire se quella forma può scontrarsi o no ... forse non c'è alcuna funzione nell'API per farlo – rraallvv

Problemi correlati