Ogre3DとBullet物理を使用して実装しているゲームで、文字の方向付けの実装に関する問題が発生しました。BulletとOgre3Dを使用した円滑な回転
私が持っているもの:キャラクターが現在進行中の方向とともに移動している方向ベクトル。
必要なもの:キャラクターの向きを動かす方向に設定します。
は、私は一種の私が欲しいものを行うコードのスニペットを持っている:「体」は、私が東洋にしようとしている剛体である
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);
。
このスニペットしかし問題のいくつかを有する:
1)の方向を変更する場合、それは急速に一方向を向いている、すなわち、それは向きに自分自身を修正する前にそう第二又は、次いで反対の、「ジッター」になる傾向がありますそれはであることになっています。コードは
assert(d != btScalar(0.0));
に、私は弾丸のbtQuaternionからアサーションエラーを取得する実行していることを
2)ほとんどの時間は、誰もが助けることはできますか?
ありがとうございます!
私はあなたが2つのベクトルからbtQuaternionを構築することができ、最初から2番目に回転する四元数を与えると思います。キャラクターの基本方位と望む方向を使用する場合は、必要なクォータニオンを取得する必要があります。あなたが四元数が一意でない回転(180°対0°のような)があるので、おそらくジッタが発生します。 – LiMuBei