我正在阅读一份很棒的OpenGL教程。相信我,它真的很好。我目前在学习Z-buffer。除了解释这是什么之外,作者还提到我们可以执行自定义深度测试,例如GL_LESS,GL_ALWAYS等。他还解释说深度值的实际含义(哪个是顶部,哪个不是)也可以自定义。到目前为止,我理解了。然后作者说了一些令人难以置信的话:
zNear的范围可以大于zFar的范围;如果是这样,那么窗口空间值将被反转,就是最靠近或最远离观察者的内容。
早先,我们说过窗口空间Z值为0时最接近,1时最远离。然而,如果我们的裁剪空间Z值被取反,深度为1的将变成最接近视图的部分,深度为0的将变成最远离视图的部分。但是,如果我们翻转深度测试的方向(从GL_LESS到GL_GREATER等),我们将得到完全相同的结果。所以这只是一个惯例。事实上,翻转Z的符号和深度测试曾经是许多游戏的重要性能优化方法。
如果我理解正确,就性能而言,翻转Z的符号和深度测试无非就是将一个 <
比较变成了一个 >
比较。所以,如果我理解正确并且作者没有说谎或捏造事实,那么将 <
改为 >
曾经是很多游戏中的重要优化。
作者是在撒谎,还是我有什么误解,或者确实曾经情况如此,<
比 >
慢(像作者所说的那样)?
感谢您澄清这个非常好奇的问题!
免责声明:我完全意识到算法复杂度是优化的主要来源。此外,我怀疑现在它绝对不会有任何区别,我并不是为了优化任何东西而提出这个问题。我只是非常、痛苦地、也许是过分好奇。