Я пытаюсь внедрить камеру от третьего лица в OpenGL.Я могу заставить его работать без каких-либо проблем, используя углы Эйлера и базовую тригонометрию:
float cameraDistance = 10.0f;
float cameraPositionX = sin(targetRotation.y) * cameraDistance;
float cameraPositionY = cos(targetRotation.y) * cameraDistance;
ViewMatrix = glm::lookAt(
glm::vec3(cameraPositionX, cameraPositionY, 30.0f) + targetLocation,
targetLocation,
glm::vec3(0,1,0)
);
Проблема заключается в том, что я начинаю использовать кватернион для хранения целевых вращений.Преобразование кватернионов в углы Эйлера дает неоднозначные результаты, и приведенный выше код больше не работает.Например, после пересечения 90 градусов, вращение y снова начинается с 0, но x и z переворачиваются, поэтому я думаю, что мне нужно было бы также включить x и z в уравнения тригонометрии, но мой мозг должен их вычислить.Есть ли способ перевести приведенный выше код для правильной работы с кватернионами?