Все работает отлично, кроме проблемы с вращением камеры, позволяющей пользователю осмотреться с помощью мыши. >
Название проблемы (из того, что я нашел в сети) называется блокировкой карданного подвеса, проблема, которая возникает, когда две оси ориентированы в одном или противоположном направлении, это вызывает визуальную аномалию, в моем случае камера вращается по оси 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));
Я все еще изучаю OpenGL и мир компьютерной графики, поэтому способ вращения камеры может быть неправильным для некоторых и вместо этого отдавать предпочтение кватернионам, но я пока не знаю, что они собой представляют.< /strong>
Подробнее здесь: https://stackoverflow.com/questions/786 ... -my-camera