投影矩阵如何工作?

时间:2014-09-04 07:27:19

标签: opengl matrix 3d

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

我决定使用"更简单的"仅限对称视口的版本(右手Coord。):

![<code>r+l=0,</code>r-l=2r<code>(width);</code>t+b=0<code>,</code>t-b=2t<code>(height);</code>[n/r 0 0 0; 0 n/t 0 0; 0 0 -(f+n)/(f-n) -(2fn)/(f-n); 0  0 -1 0]`[1]

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

1 个答案:

答案 0 :(得分:8)

矩阵的核心原因是将3D坐标映射到2D平面,并使更远的物体更小。

对于这个更简单的矩阵就足够了(假设你的相机在原点并且看着Z轴):

1 0 0 0
0 1 0 0
0 0 0 0
0 0 1 0

在与此矩阵相乘然后重新归一化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

现在结果点包含Z坐标中的反向深度。每个x,y,z,1点变为x/z,y/z,1/z,1

额外的参数是将坐标映射到(-1,-1,-1) - (1,1,1)设备框的结果(如果你在它之外的边界框,则不会得到绘制的点)比例和翻译。