Недавно я приложил к камере камеру в своей 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 хранить вращения для меня в кватернионах, поэтому тангаж не сохраняется непосредственно. Как я могу зажать шаг жесткого тела?