Камера OpenGL от третьего лица с использованием кватернионов - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь внедрить камеру от третьего лица в 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 в уравнения тригонометрии, но мой мозг должен их вычислить.Есть ли способ перевести приведенный выше код для правильной работы с кватернионами?

...