我正在尝试在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,但是我的大脑是微不足道的。有没有办法翻译上面的代码以正确使用四元数?