我在旋转偏航相机时出现问题。我让相机工作得很好,除了直视或垂直向下看。获取正确向量的十字架产品会在查找时使程序崩溃,因为我最初使用世界向量(0,1,0)穿过我的前向向量(0,1,0)。为了解决这个问题,我决定通过采用向前向量和向上向量的交叉积来计算右向量(这意味着我还需要更新向上向量)。我对这段代码的结果很奇怪,对我来说,这是有意义的:
glm::quat quaternion = glm::angleAxis(angle.x, glm::vec3(0, 1, 0));
forward = glm::rotate(quaternion, forward); // change yaw
glm::vec3 right = glm::cross(forward, up);
quaternion = glm::angleAxis(angle.y, right);
forward = glm::rotate(quaternion, forward); // change pitch
up = glm::cross(right, forward); // update up-vector, unintended result
我打电话给up = glm::cross(right, forward)
来更新相机的向上矢量,这样如果我直接指向相机,我可以安全地使用glm::vec3 right = glm::cross(forward, up)
获取我的右向量进行音高旋转。但是,这段代码会让我的相机向上旋转我的向上矢量,这是我不想要的。所有帮助表示赞赏。
简而言之,我如何重新计算相机的向上矢量,以便我可以用它来计算我的相机的正确向量与交叉产品?
编辑:为了澄清,up = glm::cross(right, forward)
出于某种原因,使我的相机“滚动”。我不知道为什么会这样。