如何为深度缓冲区写入不同于深度比较的值?

时间:2017-02-20 10:19:03

标签: opengl depth-buffer depth-testing

在Open GL中,是否可以渲染具有常规深度测试的多边形,但是当深度缓冲区值实际写入深度缓冲区时,我想写一个自定义值?

(原因是我正在渲染一个粒子系统,应该对场景中的几何进行深度测试,但我想在粒子系统所在的位置写一个非常大的深度值,从而利用深度 - 模糊后处理步骤以进一步模糊粒子系统)

更新 为了进一步细化问题,是否可以在多次传递中进行渲染?

2 个答案:

答案 0 :(得分:3)

你没有。

OpenGL不允许你撒谎。深度测试针对要写入深度缓冲区的输入值测试深度缓冲区中的值。一旦测试通过,测试的深度值将被写入深度缓冲区。周期。

您不能(ab)使用深度测试来执行除测试深度值之外的其他操作。

ARB_conservative_depth/GL 4.2确实允许您使用非常限制形式。基本上,您承诺实现只会以比原始值更小或更大的方式更改深度。但即便如此,它只会在特定情况下起作用,然后只要你保持在你指定的范围内。

执行early fragment tests同样不允许您这样做。规范明确规定在着色器执行之前将写入深度。因此,您写入gl_FragDepth的任何内容都将被忽略

答案 1 :(得分:0)

您可以在片段着色器中使用gl_FragDepth来编写自定义值。

gl_FragDepth = 0.3;

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/gl_FragDepth.xhtml