我希望能够检测到球触碰其他物体(目标),并且知道它所产生的冲量。
我知道三种检测接触的方法。
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个帧,并且脉冲减少了一半。(我通过调试代码得到的信息。)获取1个联系人通知并具有总脉冲将是完美的。
我列出的方法都没有为我提供关于该联系的完整信息。
有时候它会在球飞近目标时触发,甚至根本没有碰到它。
有什么预期的方法可以做到这一点?
这样的信息可以用于播放撞击音效或启动一些动画,如果联系人能量很高的话。