我想通过使用glDepthFunc(GL_EQUAL)
和写入深度为1.0
(最高和默认值)的每个像素,在写入深度缓冲区的所有内容后面绘制一些图元
然而,为了让它工作,我必须忽略我的图元上计算的 Z 深度,迫使它们像1.0
对所有图元一样进行测试。
1.0
无论在顶点着色器中计算的实际 z深度如何,强制特定绘制中的所有片段测试为具有 z 深度的最简单方法是什么?
我想通过使用glDepthFunc(GL_EQUAL)
和写入深度为1.0
(最高和默认值)的每个像素,在写入深度缓冲区的所有内容后面绘制一些图元
然而,为了让它工作,我必须忽略我的图元上计算的 Z 深度,迫使它们像1.0
对所有图元一样进行测试。
1.0
无论在顶点着色器中计算的实际 z深度如何,强制特定绘制中的所有片段测试为具有 z 深度的最简单方法是什么?
如果您希望所有片段的深度为 1.0,则您必须确保标准化设备坐标的 z 分量为 1.0。
归一化的设备坐标是通过剪辑坐标的透视除法gl_Position.xyz / gl_Position.w
计算的(将其视为)。
设置gl_Position.z
equal gl_Position.w
,在设置剪辑坐标后,gl_Position.z / gl_Position.w
即为 1.0:
gl_Position.z = gl_Position.w;
但请注意,片段的深度也可以在片段着色器中设置,通过将值分配给gl_FragDepth
:(
当然这可以防止早期片段测试发生)
gl_FragDepth = 1.0;