从零开始学习opengl-5.模型矩阵,观察矩阵,投影矩阵

		//创建一个模型矩阵
		glm::mat4 model;
		model = glm::rotate(model, -55.0f, glm::vec3(1.0f, 0.0f,0.0f));
		//创建一个观察矩阵
		glm::mat4 view;
		view = glm::translate(view, glm::vec3(0.0f, 0.0f,-2.0f));
		//定义一个透视投影矩阵
		glm::mat4 projection;
		projection = glm::perspective(45.0f,(GLfloat)WIDTH/ (GLfloat)HEIGHT,0.1f,100.0f);
		//第一个参数表示的是视野。对于一个真实的观察效果,它的值经常设置为45.0,第二个参数设置了宽高比。
		//第三和第四个参数设置了平截头体的近和远平面。我们经常设置近距离为0.1而远距离设为100.0
		GLint modelloc = glGetUniformLocation(ourShader.Program, "model");
		GLint  viewloc = glGetUniformLocation(ourShader.Program, "view");	
		GLint  project= glGetUniformLocation(ourShader.Program, "projection");
		glUniformMatrix4fv(modelloc, 1, GL_FALSE, glm::value_ptr(model));
		glUniformMatrix4fv(viewloc, 1, GL_FALSE, glm::value_ptr(view));
		glUniformMatrix4fv(project, 1, GL_FALSE, glm::value_ptr(projection));

顶点着色器

#version 330 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec3 color;
layout (location = 2) in vec2 texCoord;

out vec3 ourColor;
out vec2 TexCoord;

uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main()
{
     
    gl_Position = projection*view*model*vec4(position, 1.0f);
    ourColor = color;
    TexCoord = vec2(texCoord.x, 1.0 - texCoord.y);
}

一个顶点的坐标将会根据以下过程被转换到裁剪坐标:

Vclip=Mprojection⋅Mview⋅Mmodel⋅Vlocal
注意:顺序不可以调换,从右往左进行
从零开始学习opengl-5.模型矩阵,观察矩阵,投影矩阵_第1张图片
从零开始学习opengl-5.模型矩阵,观察矩阵,投影矩阵_第2张图片
个人理解:看到这里,先将观察者矩阵放在z轴反方向位置,由于把模型矩阵逆时针旋转55度,这样纹理图片下边就离观察者近,上面就远,通过投影矩阵后,近的就比较宽,而远的就比较窄,有种倾斜的感觉,更能接近人的角度。
原图:从零开始学习opengl-5.模型矩阵,观察矩阵,投影矩阵_第3张图片
效果图:从零开始学习opengl-5.模型矩阵,观察矩阵,投影矩阵_第4张图片

你可能感兴趣的:(opengl,opengl)