透视投影:证明1 / z是线性的吗?

时间:2015-02-24 22:26:35

标签: geometry rendering perspective

在3D渲染(或几何形状)中,在光栅化算法中,当您将三角形的顶点投影到屏幕上然后查找像素是否与2D三角形重叠时,您通常需要找到深度或像素重叠的三角形的z坐标。通常,该方法包括计算三角形的2D“投影”图像中像素的重心坐标,然后使用这些坐标来插值三角形原始顶点z坐标(在投影顶点之前)。

现在在所有教科书中都写过,你不能直接插入顶点的顶点坐标,而是需要这样做:

(抱歉无法让Latex工作?)

1 / z = w0 * 1 / v0.z + w1 * 1 / v1.z + w2 * 1 / v2.z

其中w0,w1和w2是三角形上“像素”的重心坐标。

现在,我正在照顾的是两件事:

  • 显示内插z不起作用的正式证据是什么?
  • 表明1 / z做正确的事情的正式证据是什么?

为了表明这不是家庭作业;-)而且我自己做了一些工作,我找到了问题2的以下解释。

基本上三角形可以用平面方程定义。因此你可以写:

Ax + By + Cz = D.

然后你将z隔离得到z =(D - Ax - By)/ C

然后你将这个公式除以z,就像用透视除法一样,如果你开发,重新组合等,你得到:

1 / z = C / D + A / D x / z + B / D y / z。

然后我们将C'= C / D B'= B / D命名为A'= A / D:

1 / z = A'x / z + B'y / z + C'

它表示x / z和y / z只是一旦投影在屏幕上三角形上的点的坐标,右边的等式是“仿射”函数,因此1 / z是线性函数? ??

这对我来说似乎不是一个示范?或者这可能是正确的想法,但不能通过查看这是一个仿射函数的等式来说明你怎么说。如果你将所有条款相乘:

A'x + B'y + C'z = 1。

这基本上就是我们原来的方程式(只需要用正确的术语替换A'B'和C'。)

1 个答案:

答案 0 :(得分:0)

不确定你在这里要问的是什么,但如果你看一下:

1/z = A'x/z + B'y/z + C'

并将其重写为:

1/z = A'u + B'v + C'

其中(u,v)是透视投影后三角形的屏幕坐标,您可以看到三角形上某点的深度(z)与(u,v)不是线性相关,而是{ {1}}就是教科书试图教你的东西。