1

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

然而,为了让它工作,我必须忽略我的图元上计算的 Z 深度,迫使它们像1.0对所有图元一样进行测试。

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

4

1 回答 1

2

如果您希望所有片段的深度为 1.0,则您必须确保标准化设备坐标的 z 分量为 1.0。
归一化的设备坐标是通过剪辑坐标的透视除法gl_Position.xyz / gl_Position.w计算的(将其视为)。

设置gl_Position.zequal gl_Position.w,在设置剪辑坐标后,gl_Position.z / gl_Position.w即为 1.0:

gl_Position.z = gl_Position.w; 

但请注意,片段的深度也可以在片段着色器中设置,通过将值分配给gl_FragDepth:(
当然这可以防止早期片段测试发生)

gl_FragDepth = 1.0;
于 2019-11-06T19:19:43.933 回答