Je souhaite détecter quand une (balle) touche un autre objet (cible) et je souhaite connaître l'impulsion de ce contact.BulletPhysic: contacts force/impulsion
Je sais trois façons de détecter les contacts
gContactAddedCallback
ou
int numManifolds = m_dynamicsWorld->getDispatcher()->getNumManifolds();
for (int i=0;i<numManifolds;i++)
{
btRigidBody* obA = static_cast<btRigidBody*>(contactManifold->getBody0());
btRigidBody* obB = static_cast<btRigidBody*>(contactManifold->getBody1());
// May be there is contact obA and obB
btPersistentManifold* contactManifold = m_dynamicsWorld->getDispatcher()->getManifoldByIndexInternal(i);
int numContacts = contactManifold->getNumContacts();
for (int j=0;j<numContacts;j++)
{
btManifoldPoint& pt = contactManifold->getContactPoint(j);
if (pt.getDistance()<0.f)
{
// One contact point is inside of another object
// But some contacts are ignored
}
}
}
ou
Vérifiez linéaire et le changement de vitesse angulaire. (Pas clair s'il y avait un contact et quel objet fait le changement de vitesse, est-ce objet ou d'amortissement, la gravité ou d'un champ de force.
Je souhaite avoir des informations de contact pour inclure l'impulsion de contacts. J'ai remarqué que certains contact résolu dans une simulation de trame autre prendre 2 images et l'impulsion est deux fois plus faible (je l'ai eu le code de débogage.) Je serais parfait pour obtenir 1 notification de contact avec l'impulsion totale
Aucune des méthodes que j'ai énumérées ne me donne information complète pour le contact Il se déclenche quand la balle vole près de la cible et ne la touche même pas
Quelle est la manière anticipée de le faire? Ces informations pourraient être utilisées pour jouer un son d'impact ou démarrer une animation si l'énergie des contacts est élevée.
pt.getAppliedImpulse() – rraallvv
pt.getAppliedImpulse() - J'ai raté celui-ci! ajouter une réponse et je vais le marquer comme tel. Merci – Max