Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用四元数的OpenGL第三人称相机_C++_Opengl_Quaternions_Glm Math_Euler Angles - Fatal编程技术网

C++ 使用四元数的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

我正在尝试在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包含在三角方程中,但我的大脑需要很小地计算它们。有没有办法翻译上述代码以正确使用四元数

为什么要使用四元数(复数)来“存储目标旋转”?你只需要一个四元数。你永远不应该把四元数转换成欧拉角。谢谢,但我已经知道了。我试图找出如何实现相同的结果,但使用四元数而不是欧拉角。基本上是如何用四元数计算相机的x和y。我是说你不应该计算这些东西。您应该使用四元数直接生成视图矩阵,而不是使用
lookAt
。谢谢