投影矩阵如何工作?

Moh*_* Li 7 opengl 3d matrix

我必须为我的A-Levels写一篇关于3D编程的论文.但是我在理解透视投影矩阵时遇到了严重的问题,我需要详细解释矩阵.我在这个主题上搜索了很多网站和youtube视频,但很少甚至尝试回答为什么 Matrix在那个地方有这些价值的问题.基于这个http://www.songho.ca/opengl/gl_projectionmatrix.html,我能够找到w-row的工作方式,但我不了解其他三个.

我决定只使用"更简单"的版本用于对称视口(右手Coord.):

![<代码> R + L = 0,</代码> RL = 2R <代码>(宽度); </代码> T + B = 0 <代码>,</代码> TB =2吨<代码>(高度); </ code> [n/r 0 0 0;  0 n/t 0 0;  0 0  - (f + n)/(fn) - (2fn)/(fn);  0 0 -1 0]`[1]

我非常感谢每一次向我解释前三行的尝试!

rat*_*eak 8

矩阵的核心原因是将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)设备箱使用规模(边界框,如果你是它外面的位置不会拿得出)和翻译.