Я пытаюсь ограничить вращение камеры вверх и вниз, чтобы ее можно было перемещать только до максимум 45 градусов и до максимум 45 градусов.
Vector3 forwards(0, 0, -1);
Vector3 up(0, 1, 0);
Vector3 rights = forwards.crossProduct(up);
Vector3 position(0, 0, 0);
switch (special_key)
{
case GLUT_KEY_RIGHT:
forwards.rotateArbitrary(Vector3::UNIT_Y_PLUS, 0.1);
rights.rotateArbitrary(Vector3::UNIT_Y_PLUS, 0.1);
break;
case GLUT_KEY_LEFT:
forwards.rotateArbitrary(Vector3::UNIT_Y_PLUS, -0.1);
rights.rotateArbitrary(Vector3::UNIT_Y_PLUS, -0.1);
break;
case GLUT_KEY_UP:
forwards.rotateArbitrary(rights, 0.1);
up.rotateArbitrary(rights, 0.1);
break;
case GLUT_KEY_DOWN:
forwards.rotateArbitrary(rights, -0.1);
up.rotateArbitrary(rights, -0.1);
break;
// add more cases here
}
glLoadIdentity();
Vector3 look_at = position + forwards;
gluLookAt(position.x, position.y, position.z,
look_at.x, look_at.y, look_at.z,
up.x, up.y, up.z);