在我使用 Ogre3D 和 Bullet 物理实现的游戏中,我一直遇到一个关于实现角色定向的问题。
我所拥有的:角色正在移动的方向向量,以及它的当前方向。
我需要什么:设置角色的方向以面对它移动的方式。
我有一段代码可以满足我的要求:
btTransform src = body->getCenterOfMassTransform();
btVector3 up = BtOgre::Convert::toBullet(Ogre::Vector3::UNIT_X);
btVector3 normDirection = mDirection.normalized();
btScalar angle = acos(up.dot(normDirection));
btVector3 axis = up.cross(normDirection);
src.setRotation(btQuaternion(axis, angle));
body->setCenterOfMassTransform(src);
“body”是我要定位的刚体。
然而,这个片段有几个问题:
1)当改变方向时,它往往会“抖动”,即它迅速面向一个方向,然后在将自己校正到它应该处于的方向之前大约一秒钟左右。
2) 大多数时候,代码运行时,我从 Bullet 的 btQuaternion 得到一个断言错误
assert(d != btScalar(0.0));
任何人都可以帮忙吗?
谢谢!