我正在阅读an awesome OpenGL tutorial。真的很好,相信我。我当前所在的主题是Z缓冲区。除了解释全部内容外,作者还提到我们可以执行自定义深度测试,例如GL_LESS,GL_ALWAYS等。他还解释了深度值(最高和最低)的实际含义也可以是定制。到目前为止我还了解。然后作者说了一些难以置信的话:
如果我正确理解,从性能角度来看,翻转Z的符号和深度测试仅是将<
比较更改为>
比较。因此,如果我理解正确,并且作者没有撒谎或编造东西,那么将<
更改为>
曾经是,这对许多游戏来说都是至关重要的优化。
作者是在编造东西吗?我是在误解什么吗?还是<
曾经比>
慢(正如作者所说,这确实很慢)?
感谢您澄清这个非常奇怪的问题!
免责声明:我完全知道算法复杂性是优化的主要来源。此外,我怀疑现在绝对不会有任何改变,我不是要这样做来优化任何东西。我只是极度,痛苦,甚至是好奇。
最佳答案
我没有特别好地解释这一点,因为它并不重要。我只是觉得这是一个有趣的琐事。我不打算专门研究该算法。
但是,上下文是关键。我从未说过比较快。请记住:我们在谈论图形硬件深度测试,而不是您的CPU。不是operator<
。
我指的是特定的旧优化,其中一帧您将使用GL_LESS
,范围为[0,0.5]。在下一帧,使用GL_GREATER
进行渲染,范围为[1.0,0.5]。您来回走动,字面意思是每帧“翻转Z的符号和深度测试”。
这会损失一点深度精度,但是您不必清除深度缓冲区,这曾经是一个相当慢的操作。由于深度清理不仅现在免费,而且实际上比这种技术快,所以人们不再这样做。
关于c - 从前,当>快于<…时,等等?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7338858/