针对特定深度值强制深度测试,而不是片段的实际深度
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;
我想通过使用 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;