Space、Projection、View
程序运行效果
空间 Space ?
在电脑中,空间就是某种坐标系!
Space = Coordinate
公式:
Vclip = Mprojection ⋅ Mview ⋅ Mmodel ⋅ Vlocal
V: Vector、 M: Matrix、local: Vertex
反方向(右到左)看过来:
local代表本地的顶点数据---->
---->经由Model Matrix转换得到---->
---->[World Space世界空间] ?坐标系的转换!---->
而得到的世界空间的坐标系我们---->
---->经由View Matrix转换得到---->
---->[View Space观察空间] ? (可以是Camera摄像机) ---->
而得到的观察空间坐标系我们---->
---->经由Projection Matrix转换得到---->
---->[Clip Space剪裁空间] ? (空间很大,但屏幕有限,so…) ---->
---->经由Viewport Transform视口变换 ---->
----> [Screen Space显示器屏幕(2D)]
(学习OpenGL或者Direct3D,我们可以先不要关注线性代数、离散数学等内容,可以先将流程与代码搞清楚就好…)
dont ask why,first how to do!
shader 代码:
#version xxx xxx
layout (location = n) in vec3 vert;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main()
{
gl_Position = projection * view * model * vec4(vert, 1.0f);
}
注意:矩阵以及向量相乘的这个顺序不能改变!
投影、视角
代码:
// projection投影矩阵:角度(45度) 视野FOV(Field of View)、宽高比、NearPlane近平面、FarPlane远平面
glm::mat4 proj = glm::mat4(1.0f);
proj = glm::perspective(glm::radians(45.0f), (float