我在使用子弹物理学进行射线测试时遇到了问题。 raytest仅适用于具有标识转换的对象。如果有任何翻译,则计算错误的射线测试。这是代码: [代码]
btTransform trans;
trans.setIdentity();
trans.setFromOpenGLMatrix(matrix.m);
btDefaultMotionState* motionState = new btDefaultMotionState(trans);
btRigidBody::btRigidBodyConstructionInfo rbInfo(
0, motionState, m_pVertexBuffer->GetBulletShape(), btVector3(0,0,0));
btRigidBody* body = new btRigidBody(rbInfo);
g_physics.GetWorld()->addRigidBody(body);
....
g_physics.GetWorld()->updateAabbs();
g_physics.GetWorld()->computeOverlappingPairs();
btVector3 btStart(x1, y1, z1);
btVector3 btEnd(x2, y2, z2);
btCollisionWorld::ClosestRayResultCallback ray(btStart, btEnd);
// Perform raycast
g_physics.GetWorld()->rayTest(btStart, btEnd, ray);
if (ray.hasHit())
{
btEnd = ray.m_hitPointWorld;
}
[/代码] 现在,我的游戏使用z轴作为向上,但这不应该是一个问题,因为光线也输入为z。