轨道相机(C++,GLM)
Orbit camera (C++, GLM)
我正在尝试为我的 OpenGL 应用程序编写轨道相机(基于 glm::quat)。
我有几个问题:
我是否可以根据 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 = **???**;
这行是否正确?:
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);
我正在尝试为我的 OpenGL 应用程序编写轨道相机(基于 glm::quat)。 我有几个问题:
我是否可以根据 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 = **???**;
这行是否正确?:
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);