轨道相机(C++,GLM)

Orbit camera (C++, GLM)

我正在尝试为我的 OpenGL 应用程序编写轨道相机(基于 glm::quat)。 我有几个问题:

  1. 我是否可以根据 RotationMatrix + 相机位置制作 ViewMatrix?

    camera_quat = glm::quat(glm::vec3(tmp_pitch, tmp_yaw, 0)) * camera_quat;

    float pitch = camera_quat.pitch();
    float yaw = camera_quat.yaw();
    
    glm::mat4 rotate = glm::mat4_cast(camera_quat);
    
    glm::vec3 view_direction(cos(yaw) * cos(pitch), sin(pitch), -sin(yaw) * cos(pitch));
    camera_position = target - view_direction * radius;
    
    glm::mat4 translate = glm::translate(camera_position);
    
    glm::mat4 view_matrix = **???**;
    
  2. 这行是否正确?: glm::vec3 view_direction(cos(yaw) * cos(pitch), sin(pitch), -sin(yaw) * cos(pitch));

P.S。对不起,如果我的英语不好。这不是我的母语,我是俄语。 我希望你能帮助我。提前致谢!

如果将 translate 矩阵更改为

glm::mat4 translate = glm::translate(-camera_position);

,应该就是

glm::mat4 view_matrix = rotation * translation;

不过,有更简单的方法可以到达那里。你基本上想要做的是:将相机移动到目标,在那里旋转相机,将它向后移动一点。这可以用矩阵形式表示(注意视图矩阵是相机的逆模型变换):

view_matrix = glm::translate(0, 0, -radius) * rotate * glm::translate(-target);