C++ 使用四元数的OpenGL第三人称相机
我正在尝试在OpenGL中实现第三人称相机。使用欧拉角和基本三角学,我可以让它毫无问题地工作:C++ 使用四元数的OpenGL第三人称相机,c++,opengl,quaternions,glm-math,euler-angles,C++,Opengl,Quaternions,Glm Math,Euler Angles,我正在尝试在OpenGL中实现第三人称相机。使用欧拉角和基本三角学,我可以让它毫无问题地工作: float cameraDistance = 10.0f; float cameraPositionX = sin(targetRotation.y) * cameraDistance; float cameraPositionY = cos(targetRotation.y) * cameraDistance; ViewMatrix = glm::lookAt( glm::vec3(cam
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包含在三角方程中,但我的大脑需要很小地计算它们。有没有办法翻译上述代码以正确使用四元数 为什么要使用四元数(复数)来“存储目标旋转”?你只需要一个四元数。你永远不应该把四元数转换成欧拉角。谢谢,但我已经知道了。我试图找出如何实现相同的结果,但使用四元数而不是欧拉角。基本上是如何用四元数计算相机的x和y。我是说你不应该计算这些东西。您应该使用四元数直接生成视图矩阵,而不是使用
lookAt
。谢谢