1 つの (ボール) が別のオブジェクト (ターゲット) に触れたことを検出し、その接触のインパルスを知りたいと考えています。
連絡先を検出する 3 つの方法を知っている
gContactAddedCallback
また
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
}
}
}
また
直線速度と角速度の変化を確認します。(接触があったのか、どのオブジェクトが速度を変化させたのか、それがオブジェクトか減衰か、重力か、何らかの力場かは明らかではありません。
連絡先インパルスを含む連絡先情報が欲しいです。一部の接触は 1 フレームのシミュレーションで解決され、他のものは 2 フレームでインパルスが 2 倍低くなることに気付きました。(コードのデバッグを行いました。) 完全なインパルスで 1 つの連絡先通知を取得するのに最適です。
私がリストした方法のどれも、連絡先の完全な情報を提供してくれません。ボールがターゲットの近くを飛んでいて、ターゲットに触れていない場合でも、発射されることがあります。
それを行うために予想される方法は何ですか?
このような情報は、接触エネルギーが高い場合に衝撃音を再生したり、アニメーションを開始したりするために使用できます。