我正试图在OpenGL中通过鼠标轨迹球进行简单的相机旋转 . 目前,我计算鼠标的位移并使用它来生成旋转矩阵,我用它来更新摄像机位置和向上矢量 .

但是,相机现在只能沿一个平面旋转 . 例如,如果我首先在那些方向上移动鼠标,它会左右移动,但如果我将它向一侧旋转90度,即使我还在向左移动鼠标,它也会上下旋转 .

以下代码用于计算视点矩阵 . rotAxis和rotAngle由轨迹球映射生成,将鼠标位置映射到球体 .

我知道我需要通过旋转矩阵来乘以某些东西,该旋转矩阵考虑了相机相对于世界矩阵的位置 . 但是,我不知道那个矩阵是什么 .

cam_pos = [unknown_matrix] * glm::rotate(cam_pos, rotAngle / 180.0f * glm::pi<float>(), rotAxis);
cam_up = [unknown_matrix] * glm::rotate(cam_up, rotAngle / 180.0f * glm::pi<float>(), rotAxis);
V = glm::lookAt(cam_pos, cam_look_at, cam_up);