我想通过使用glDepthFunc(GL_EQUAL)
并写入每个深度为1.0
(最高和默认值)的像素,在写入深度缓冲区的所有内容后面绘制一些基元。
但是,要使其正常工作,我必须忽略对基元计算出的Z深度,迫使它们对所有基元进行测试,好像它们是1.0
。
不管顶点着色器中计算的实际z深度如何,最简单的方法是强制特定绘图中的所有片段的z深度为1.0
,以进行测试?
答案 0 :(得分:2)
如果希望所有片段的深度为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;