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

Geometry 透视投影:证明1/z是线性的?,geometry,rendering,perspective,Geometry,Rendering,Perspective,在3D渲染(或几何体)中,在光栅化算法中,当您将三角形的顶点投影到屏幕上,然后查找像素是否与2D三角形重叠时,通常需要查找像素重叠的三角形的深度或z坐标。通常,该方法包括计算三角形2D“投影”图像中像素的重心坐标,然后使用这些坐标插值三角形原始顶点z坐标(在顶点投影之前) 现在,所有教科书都规定,不能直接插值顶点的顶点坐标,但需要这样做: (对不起,乳胶不能用了?) 1/z=w0*1/v0.z+w1*1/v1.z+w2*1/v2.z 其中w0、w1和w2是三角形上“像素”的重心坐标 现在,我要照

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

现在,所有教科书都规定,不能直接插值顶点的顶点坐标,但需要这样做:

(对不起,乳胶不能用了?)

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/Dx/z+B/Dy/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/z = A'x/z + B'y/z + C'
并将其改写为:

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

其中
(u,v)
是透视投影后三角形的屏幕坐标,您可以看到三角形上点的深度(
z
)与
(u,v)不是线性相关的<代码> > <代码> 1 /深度>代码>,这正是教科书试图教给你的。遗憾的是,考虑一下细分你的三角形的情况。请注意,原始三角形的中心不会投影到原始三角形投影角的中心。