我想检测一个(球)何时接触到另一个物体(目标),我想知道那个接触的冲动。
我知道三种检测接触者的方法
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 个完全冲动的联系通知。
我列出的所有方法都没有为我提供联系人的完整信息。有时它会在球飞到目标附近甚至没有碰到它时发射。
预期的方法是什么?
如果接触能量很高,这些信息可以用来播放撞击声或开始一些动画。