Я не могу решить проблему блокировки подвеса в своей камере [закрыто]C++

Программы на C++. Форум разработчиков
Anonymous
Я не могу решить проблему блокировки подвеса в своей камере [закрыто]

Сообщение Anonymous »

Делаю скрипт для камеры,
Все работает отлично, кроме проблемы с вращением камеры, позволяющей пользователю осмотреться с помощью мыши. >
Название проблемы (из того, что я нашел в сети) называется блокировкой карданного подвеса, проблема, которая возникает, когда две оси ориентированы в одном или противоположном направлении, это вызывает визуальную аномалию, в моем случае камера вращается по оси Z, пытаясь отразить изображение по горизонтальной оси.
Чтобы начать с этой проблемы, я добавил элемент управления углом, короче говоря, я вычисляю угол между Вектор вверх и новая ориентация камеры. Если она находится в определенном диапазоне, в час используется новая ориентация, вот код:

Код: Выделить всё

double mouseX, mouseY;
glfwGetCursorPos(window, &mouseX, &mouseY);

float rotX = sensitivity * ((int)mouseX * (2.0f / width) - 1.0f);
float rotY = sensitivity * ((int)mouseY * (2.0f / -height) + 1.0f);

orientation = glm::rotate(orientation, glm::radians(-rotX), up);
glm::vec3 nOrientation = glm::rotate(orientation, glm::radians(rotY), glm::normalize(glm::cross(orientation, up)));

float angle = glm::degrees(glm::angle(nOrientation, up));

if (angle > 5.0 && angle < 175.0)
orientation = nOrientation;

glfwSetCursorPos(window, (width / 2), (height / 2));
Проблема частично решена, ведь код не позволяет мне смотреть вверх ниже 5 градусов и вверх выше 175 градусов, но это только если я двигаю мышкой с нормальной скоростью, в на самом деле, если я увеличиваю скорость, с которой поднимаюсь или опускаюсь, проблема проявляется сама собой, или я пробовал уменьшить диапазон с 5-175 до 30-150, но все равно не помогло.
Я все еще изучаю OpenGL и мир компьютерной графики, поэтому способ вращения камеры может быть неправильным для некоторых и вместо этого отдавать предпочтение кватернионам, но я пока не знаю, что они собой представляют.< /strong>

Подробнее здесь: https://stackoverflow.com/questions/786 ... -my-camera

Вернуться в «C++»