【问题标题】:How to write/prevent writing to OpenGL depth buffer in GLSL如何在 GLSL 中写入/防止写入 OpenGL 深度缓冲区
【发布时间】:2011-04-26 16:28:35
【问题描述】:

仅当当前像素的 alpha > 0.5 时,我才想写入 OpenGL 深度缓冲区 该怎么做?

如果像素的 alpha discard 不是我要找的,因为它丢弃了颜色和深度信息;我只想丢弃深度信息。

可以设置gl_FragDepth 变量,但设置为哪个值? 而对于 alpha gl_FragDepth 不变?

我必须为此使用 FBO,还是不需要它也可以工作? 我正在做的项目是一个 GLES 2.0 Android 项目

【问题讨论】:

  • 我认为您不能一次性完成此操作,至少不能直接且效率不高。您当然可以将 gl_FragDepth 设置为会导致深度测试失败的值(例如 zfar),但这也会丢弃片段的颜色。使用不同的 alpha 测试进行两次通过,这应该可以工作...但是在 ES 上,您可能无法像这样再通过一次。

标签: android opengl-es glsl opengl-es-2.0


【解决方案1】:

我已经通过使用

为我解决了这个问题
glDepthMask(false)

此命令禁用对深度缓冲区的写入,但仍执行深度测试。 我只是在所有其他对象之后渲染了我的透明对象,并得到了我正在寻找的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    相关资源
    最近更新 更多