0%

坐标空间

坐标空间

MVP是有顺序的.project * view * model
局部坐标系先乘model,在view,再project.
MVP的矩阵是裁剪空间.
裁剪空间最后到fs是ndc空间.
ndc空间opengl和d3d的z不一样.
opengl是-1,1.
d3d是0,1
在构建project矩阵时,可以设置.

1
2
3
4
5
6
7
8
9
10
11
12
template<typename T>
GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspective(T fovy, T aspect, T zNear, T zFar)
{
if(GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO)
return perspectiveLH_ZO(fovy, aspect, zNear, zFar);
else if(GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO)
return perspectiveLH_NO(fovy, aspect, zNear, zFar);
else if(GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO)
return perspectiveRH_ZO(fovy, aspect, zNear, zFar);
else if(GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO)
return perspectiveRH_NO(fovy, aspect, zNear, zFar);
}
1
"ZO" stands for Zero to One, indicating a depth range of 0 to 1.

opengl默认使用perspectiveRH_NO来构建project矩阵

1
"NO" stands for Negative One to One, signifying a depth range of -1 to 1.