MVP变换坐标
· 阅读需 2 分钟
MVP概念
在opengl中,MVP
称为模型观察投影矩阵,它是模型(Model)、观察(View)和投影(Projection)矩阵作用在物体上组合作用,用于对物体的坐标系进行变换。
如上图所示,物体的坐标系变化过程为:
- 局部坐标系
- 世界坐标系
- 观察坐标系
- 裁剪坐标系
MVP公式
$$ MVP=Mprojection⋅Mview⋅Mmodel$$
在shader中用MVP * gl_Position 得到转换后的坐标。
示例代码
在OpenGL纹理中,介绍了纹理的使用方法,最终的运行效果为:
修改vertext shader,添加MVP变量
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aTexCoord;
uniform mat4 MVP;
out vec2 TexCoord;
void main()
{
gl_Position = MVP * vec4(aPos, 1.0);
TexCoord = aTexCoord;
}
在绘制之前将MVP矩阵传入着色器:
glm::mat4 projection = glm::perspective(glm::radians(45.0f), (float) width / (float)height, 0.1f, 100.0f);
glm::mat4 view = glm::lookAt(glm::vec3(1,2,3), glm::vec3(0,0,0), glm::vec3(0,1,0));
glm::mat4 model = glm::mat4(1.0f);
glm::mat4 mvp = projection * view * model;
GLuint mvpId = glGetUniformLocation(programID, "MVP");
glUniformMatrix4fv(mvpId, 1, GL_FALSE, &mvp[0][0]);
现在的运行效果如下: