【问题标题】:Force depth test against a specific depth value, instead of fragment's actual depth针对特定深度值强制深度测试,而不是片段的实际深度
【发布时间】:2020-03-03 08:14:36
【问题描述】:

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

但是,要使其正常工作,我必须忽略在我的图元上计算的 Z 深度,强制它们进行测试,就好像它们都是 1.0

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

【问题讨论】:

    标签: opengl glsl opengl-3 depth-testing


    【解决方案1】:

    如果您希望所有片段的深度为 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;
    

    【讨论】:

      猜你喜欢
      • 2017-09-17
      • 2021-04-18
      • 1970-01-01
      • 2020-05-19
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多