这意味着此时投影已经完成。这篇文章给了我们OpenGL使用的投影矩阵,影响一个点z坐标的因素是行:
[ 0 0 -(f+n)/(f-n) -2fn/(f-n) ]
请注意,计算此矩阵是为了将“金字塔”平截头体制成一个单位立方体。这意味着在应用此矩阵后,z 坐标也已映射到 [0,1]。
然后,深度值精度一章的作者告诉我们:这些视图空间中的 z 值可以是截锥体近平面和远平面之间的任何值,我们需要一些方法将它们转换为 [0,1]。问题是为什么在这一点上,当我们在应用投影矩阵时已经映射了它。
此外,他说:像这样的线性深度缓冲区:
F_depth=z-near/(far-near)
从未使用过,为了正确的投影属性,使用非线性深度方程:
F_depth= (1/z- 1/near)/(1/far - 1/near)
但是,正如我们所见,z 在范围内使用:
[ 0 0 -(f+n)/(f-n) -2fn/(f-n) ]
这似乎是线性的。
所有这些自相矛盾的陈述让我非常困惑何时计算和比较片段的深度,以及实际用于计算它的方程是什么。在我的理解中,在应用 OpenGL 投影矩阵之后应该不再计算深度,但是在阅读完这篇文章后我真的很困惑。任何澄清?