我正试图在我的opengl游戏引擎中使用子弹物理库进行碰撞检测。
我不是想做任何复杂的事情,我只想知道事情何时在3D世界中发生碰撞。我只使用盒子形状,我没兴趣使用物理移动物体(我甚至禁用了刚体的碰撞响应)。
我设法让碰撞工作如下:
首先,每个框架我根据附加的实体变换更新刚体世界变换。例如,我将我的播放器向右移动,刚体(和边界框)随我移动。
我正在使用此代码检查2个对象是否发生冲突:
void PhysicsManager::myTickCallback(btDynamicsWorld *world, btScalar timeStep)
{
int numManifolds = world->getDispatcher()->getNumManifolds();
if (numManifolds > 0)
cout << "COLLISION" << endl;
}
myTickCallback是动态世界内部回拨回调:dynamicsWorld-&gt; setInternalTickCallback(myTickCallback);
现在奇怪的是,当我启动游戏时,我将我的播放器移动到我希望它碰撞的另一个对象上,它开始发送垃圾邮件。如果我将播放器留在对象上,它将继续发送垃圾邮件。但是,如果离开物体并多次返回它,过一会儿它就会停止写入碰撞。
我已经检查了刚体是否在移动(如果有碰撞响应)并且没有。
这可能是我试图创造的游戏中的一个问题,因为我希望玩家被投射物击中,如果他在一段时间后不再受到打击,那就不对了。