我正在尝试为 3D OpenGL 项目创建一个 Camera 类。但是我无法弄清楚如何将相机实际应用到我的场景中。我有这些相机功能(除其他外):
void Camera::update(){
glm::vec3 direction(cos(_verticalAngle) * sin(_horizontalAngle), sin(_verticalAngle), cos(_verticalAngle) * cos(_horizontalAngle));
glm::vec3 right = glm::vec3(sin(_horizontalAngle - 3.14f/2.0f), 0, cos(_horizontalAngle - 3.14f/2.0f));
glm::vec3 up = glm::cross(right, direction);
_projectionMatrix = glm::perspective(_FoV, float(VIEWPORT_X) / float(VIEWPORT_Y), 0.1f, 250.0f);
_viewMatrix = glm::lookAt(_position, _position + direction, up);
}
glm::mat4 Camera::getProjectionMatrix(){
return _projectionMatrix;
}
glm::mat4 Camera::getViewMatrix(){
return _viewMatrix;
}
它们是根据教程创建的,但我不确定它们是否有效,因为我无法测试它们。我想要做的是让 OpenGL 使用视图和投影矩阵来模拟相机。我究竟如何告诉 OpenGL 使用这些投影和视图矩阵,以便它正确地模拟与模型转换分开的相机?我知道 OpenGL 默认不接受 glm 矩阵,但我在一些教程中看到过这种类型的东西:
glm::mat4 ProjectionMatrix = getProjectionMatrix();
glm::mat4 ViewMatrix = getViewMatrix();
glm::mat4 ModelMatrix = glm::mat4(1.0);
glm::mat4 MVP = ProjectionMatrix * ViewMatrix * ModelMatrix;
glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &MVP[0][0]);
但是 glUniformMatrix4fv (我认为它应用了相机变换?)对我来说毫无意义。它总是与着色器有关,而我没有。我目前只有一个线框测试网格。有人可以为我提供这个问题的代码片段吗?