【发布时间】:2015-04-26 18:31:26
【问题描述】:
在 3D 渲染(或几何)中,在光栅化算法中,当您将三角形的顶点投影到屏幕上,然后查找像素是否与 2D 三角形重叠时,您通常需要查找深度或像素重叠的三角形的 z 坐标。通常,该方法包括计算三角形的二维“投影”图像中像素的重心坐标,然后使用这些坐标对三角形原始顶点的 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/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')。
【问题讨论】:
-
考虑细分三角形的情况。请注意,原始三角形的中心不会投影到原始三角形的投影角的中心。
标签: geometry rendering perspective