最近、3D ゲームのカメラに剛体を取り付けて、環境と衝突できるようにしました。ここまでで、マウスの動きは剛体を直接回転させます。
#include <BULLET/btBulletDynamicsCommon.h>
void Rotate(float Pitch, float Yaw, float Roll, float Speed)
{
// get current rotation
btTransform transform = body->getWorldTransform();
btQuaternion rotation = transform.getRotation();
// create orientation vectors
btVector3 up(0, 1, 0);
btVector3 lookat = quatRotate(rotation, btVector3(0, 0, 1));
btVector3 forward = btVector3(lookat.getX(), 0, lookat.getZ()).normalize();
btVector3 side = btCross(up, forward);
// rotate camera with quaternions created from axis and angle
rotation = btQuaternion(up, Amount.getY()) * rotation;
rotation = btQuaternion(side, Amount.getX()) * rotation;
rotation = btQuaternion(forward, Amount.getZ()) * rotation;
// set new rotation
transform.setRotation(rotation);
body->setWorldTransform(transform);
}
-80°
カメラのピッチをからの範囲でクランプしたいと思い80°
ます。これは、プレイヤーが方向を維持するのに役立ちます。そうでなければ、彼はカメラを頭上で回転させて、自分の背後にある世界を上下逆さまに見ることができます. 対照的に、これを試みる実在の人物は首を折るでしょう。
Bullet Physicsにクォータニオンで回転を保存させたので、ピッチは直接保存されません。剛体のピッチを固定するにはどうすればよいですか?