针对特定深度值强制深度测试,而不是片段的实际深度

Force depth test against a specific depth value, instead of fragment's actual depth

我想通过使用 glDepthFunc(GL_EQUAL) 并写入深度为 1.0(最高和默认值)的每个像素,在写入深度缓冲区的所有内容后面绘制一些图元

但是,为了使它起作用,我必须忽略我的图元上计算出的 Z 深度,迫使它们进行测试,就好像所有图元都是 1.0 一样。

无论在顶点着色器中计算的实际 z 深度如何,强制特定绘制中的所有片段测试具有 1.0 的 z 深度的最简单方法是什么?

如果您希望所有片段的深度都为 1.0,则必须确保标准化设备坐标的 z 分量为 1.0。
归一化设备坐标由 perspective divide 形式的剪辑坐标计算(将其视为 gl_Position.xyz / gl_Position.w)。

设置gl_Position.z等于gl_Position.w,设置剪辑坐标后,导致gl_Position.z / gl_Position.w为1.0:

gl_Position.z = gl_Position.w; 

但是请注意,片段的深度也可以在片段着色器中设置,方法是给gl_FragDepth赋值:
(当然这可以防止 Early Fragment Test 发生)

gl_FragDepth = 1.0;