矩阵的核心原因是将3D坐标映射到2D平面,并使更远的对象更小.
对于这个更简单的矩阵就足够了(假设你的相机在原点并且看着Z轴):
1 0 0 0
0 1 0 0
0 0 0 0
0 0 1 0
Run Code Online (Sandbox Code Playgroud)
在与此矩阵相乘然后重新归一化w坐标之后,您就具有了这一点.每个x,y,z,1点都变成了x/z,y/z,0,1.
但是没有深度信息(所有点的Z都为0),因此深度缓冲区/滤波器不起作用.为此,我们可以为矩阵提供参数,以便深度信息保持可用:
1 0 0 0
0 1 0 0
0 0 0 1
0 0 1 0
Run Code Online (Sandbox Code Playgroud)
现在,结果点包含Z坐标中的反向深度.每个x,y,z,1点都变成了x/z,y/z,1/z,1.
额外的参数坐标映射到的结果(-1,-1,-1)- (1,1,1)设备箱使用规模(边界框,如果你是它外面的位置不会拿得出)和翻译.