针对特定深度值而不是片段的实际深度进行深度测试

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

但是,要使其正常工作,我必须忽略对基元计算出的Z深度,迫使它们对所有基元进行测试,好像它们是1.0

不管顶点着色器中计算的实际z深度如何,最简单的方法是强制特定绘图中的所有片段的z深度为1.0,以进行测试?

landing1984 回答:针对特定深度值而不是片段的实际深度进行深度测试

如果希望所有片段的深度为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;
本文链接:https://www.f2er.com/3149519.html

大家都在问