【问题标题】:Algorithms where a colour value is not written by fragment shader片段着色器不写入颜色值的算法
【发布时间】:2012-07-31 17:54:49
【问题描述】:

我一直在阅读 OpenGL ES 着色语言规范,其中有一段让我感到困惑:

7.2 片段着色器特殊变量
...
片段着色器不需要写入 gl_FragColor 或 gl_FragData。有 许多算法,例如阴影体积,包括没有颜色值的渲染通道 书面。

我看过很多关于阴影体积和着色器的文章,但我找不到任何关于这些算法如何在不写颜色值的情况下做任何事情的信息,因为似乎没有办法从在 ES 平台上单独使用顶点着色器。 Desktop GL 有几何着色器,似乎是为了这种效果,但在 ES 2.0 Core 中没有这样的东西。

这是无意中从桌面规范中遗留下来的,允许扩展还是我错过了什么?

【问题讨论】:

    标签: opengl-es-2.0 shader


    【解决方案1】:

    几周前我用 opengl es 2.0 写了一个影子卷算法。

    为此,在某些通道中,您不写颜色。

    例如,您必须使用模板缓冲区,根据可见/不可见面和轮廓来增加/减少模板。当你做这项工作时,你必须禁用颜色 (GLES20.glColorMask(false, false, false, false);)。

    如果您不这样做,您将拥有很多人工制品。 这里的目标是更新模板而不更新颜色(片段缓冲区)。

    关于阴影体积的更多详细信息以及为什么需要禁用颜色: http://http.developer.nvidia.com/GPUGems/gpugems_ch09.html

    (对不起我的英语不好):-)

    【讨论】:

    • 有道理。因此,无论是否写入颜色,都会更新模板。这对于了解各种技术非常有用。这同样适用于深度缓冲区吗?
    • 没错,在我的算法中,深度缓冲区在更新模板时被禁用。
    猜你喜欢
    • 2021-01-02
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2013-11-13
    相关资源
    最近更新 更多