轨道相机(C ++,GLM)

时间:2016-08-03 18:27:07

标签: c++ opengl math camera glm-math

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

  1. Сan我从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));

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

1 个答案:

答案 0 :(得分:1)

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