【问题标题】:Per-component alpha-channels with OpenGL?使用 OpenGL 的每个组件的 alpha 通道?
【发布时间】:2010-05-12 11:33:48
【问题描述】:

是否可以使用 OpenGL 对每个组件使用一个 Alpha 通道(一个用于红色,一个用于绿色,一个用于蓝色)进行混合?如果没有,有哪些可能的解决方法?

【问题讨论】:

    标签: opengl graphics alphablending


    【解决方案1】:

    这不是直接支持的。不过,您自己也很容易实现:

    • 使用 3 通道“alpha”纹理和glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_COLOR) 渲染您的三角形(或其他)
    • 启用多纹理并设置“alpha”纹理来调制 rgb 纹理
    • 使用glBlendFunc(GL_ONE, GL_ONE) 渲染您的三角形

    【讨论】:

    • 嗯,我认为这不适用于任何透支?这是多遍算法的常见问题......
    • @Bahbar 普通 alpha 混合也不适用于任何透支。您必须对片段进行深度排序才能获得正确的结果。
    • 对,您必须使用单程排序。但是,如果您以相同的排序粒度执行多遍,您的解决方案仍然有效。一开始我并没有意识到。
    • 非常感谢!这很有帮助。
    【解决方案2】:

    您可以使用像素着色器来执行此操作,但您需要找到一种方法来存储/访问每个组件的 alpha 值。您可以将它们存储在纹理中,并将正常颜色分量视为相应颜色的 alpha 值。

    你想达到什么效果/输出?

    【讨论】:

      【解决方案3】:

      OpenGL 无法实现您所描述的内容。

      也就是说,考虑到您是 OpenGL 的新手,也许您所描述的并不完全是您所追求的?

      混合是在您确定当前片段(通常来自三角形)应该具有的颜色后发生的步骤。该颜色需要与帧缓冲区中的先前颜色合并。你确定这就是你所追求的吗?

      【讨论】:

      • 有完全正当的理由想要这样做,在现实世界中,大多数物体在整个色谱中的透明度都不相同(考虑彩色玻璃窗)。
      • @Andreas Brinck:是的,有。但是 OP 清楚地表明他对 OpenGL 完全陌生。也许他不知道混合的确切含义(我之前多次看到它与片段颜色计算混淆)。
      【解决方案4】:

      您可能正在寻找:GL_ARB_blend_func_extended

      【讨论】:

        猜你喜欢
        • 2014-01-18
        • 1970-01-01
        • 2011-10-29
        • 1970-01-01
        • 1970-01-01
        • 2012-04-08
        • 1970-01-01
        • 2011-06-18
        • 1970-01-01
        相关资源
        最近更新 更多