环绕摄影机(C++,GLM)

Orbit camera (C++, GLM)

本文关键字:GLM C++ 摄影机      更新时间:2023-10-16

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

  1. С我可以从RotationMatrix+相机的位置制作ViewMatrix吗?

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

    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));

附言:对不起,如果我的英语不好。这不是我的母语,我是俄罗斯人。我希望你能帮助我。提前谢谢你!

如果将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);