deb*_*air 3 opengl depth-buffer
OpenGL 说如果深度函数是 GL_LESS 并且布局限定符是 depth_less,那么 OpenGL 将执行早期深度测试。
现在,如果缓冲区中的原始值为 0.5,并且特定像素的深度为 0.8,则早期深度测试将失败。但是如果我们将值修改为 0.4,那么它应该不会失败。在这种情况下这是如何工作的?
我认为您问题中的价值观组合没有意义。使用(默认)GL_LESS深度比较功能,您需要使用:
layout (depth_greater) out float gl_FragDepth;
Run Code Online (Sandbox Code Playgroud)
仍然允许进行早期深度测试。通过此声明,您可以保证,如果您更改着色器中的深度值,只会使其变大。
使用GL_LESS比较函数,未通过深度测试的片段的深度值将大于深度缓冲区中的当前值。这意味着可以在不影响结果的情况下使用早期深度测试depth_greater:
使用具有任何深度函数的任何布局限定符是完全合法的。但是如果你使用:
layout (depth_less) out float gl_FragDepth;
Run Code Online (Sandbox Code Playgroud)
有GL_LESS,它确实没有帮助,而且早期深度测试将不会被使用。
| 归档时间: |
|
| 查看次数: |
683 次 |
| 最近记录: |