Ogre3D と Bullet physics を使用して実装しているゲームでのキャラクターの向きの実装に関する問題に苦しんでいます。
私が持っているもの:現在の向きとともに、キャラクターが移動している方向ベクトル。
必要なもの:キャラクターの向きを、キャラクターが動いている方向に向くように設定します。
私は、私が望むことを行うコードのスニペットを持っています:
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) 方向を変えるとき、それは「ジッター」する傾向があります。つまり、ある方向に向きを修正する前に、1 秒ほど反対の方向に急速に向きを変えます。
2) コードが実行されるほとんどの場合、Bullet の btQuaternion からアサーション エラーが発生します。
assert(d != btScalar(0.0));
誰でも助けることができますか?
ありがとう!