【问题标题】:glBlendFunc and alpha blendingglBlendFunc 和 alpha 混合
【发布时间】:2010-09-16 06:26:39
【问题描述】:

我想知道 glBlendFunc 是如何工作的。例如,我有 2 个 gl 纹理,其中 alpha 在 tex1 上,我想在我的最终图像中使用 alpha。颜色在 tex1 上的地方,我想要 tex2 的颜色。

【问题讨论】:

    标签: c++ opengl


    【解决方案1】:

    glBlendFunc 仅适用于最终颜色片段如何与帧缓冲区混合。我认为你想要的是多重纹理,通过使用 glTexEnv 混合纹理阶段来组合两个纹理,或者使用片段着色器来组合两个纹理。

    【讨论】:

    • 这需要使用 ARB 扩展吗?
    • DavidG:如果该技术使用 ARB_texture_env_combine 或着色器,它会。两者都得到广泛支持。
    【解决方案2】:

    抱歉,无法通过简单的混合来做到这一点。例如,我们过去常常使用 frament 着色器来做同样的事情。

    【讨论】:

      【解决方案3】:

      第二个着色器。如果您可以使用着色器,则可以更轻松地对数据做您想做的事情,而不是使用神秘的混合功能。

      【讨论】:

        【解决方案4】:

        遗憾的是,这是针对 iPhone 上的 openGL ES 的,所以没有着色器,但要点是。我的问题是问题的一个非常简化的版本,我需要对定义的纹理的一部分应用简单的颜色(包括 alpha)。正如 Lee 所指出的,纹理混合是为了让 alpha 显示在帧缓冲区上。解决方案是坚持艺术家将纹理的“动作位”设为白色,然后为我渲染的顶点分配颜色。像这样的。

        glTexCoordPointer( 2, GL_FLOAT, 0, sprite->GetTexBuffer() );
        glVertexPointer( 3, GL_FLOAT, 0, sprite->GetVertexBuffer() );
        glColorPointer( 4, GL_FLOAT, 0, sprite->GetColorBuffer() );
        glDrawArrays( GL_TRIANGLES, 0, 6 ); // Draw 2 triangles
        

        即使它有纹理,有颜色意味着它添加到纹理的颜色,所以它是 alpha 的地方,它仍然是 alpha,而它是白色的(因为我必须制作它),它变成了颜色该点的颜色指针。

        【讨论】:

        • “动作位”是什么意思?您在此处描述的内容是否解决了您的问题?
        • 是的,这解决了我的问题。 “动作位”是我想用不同颜色绘制的部分。基本上,如果我想要一个纹理(可能像字体集),其中每个非透明位都需要自定义颜色,我使用了这个。
        猜你喜欢
        • 1970-01-01
        • 2012-06-27
        • 2015-03-30
        • 1970-01-01
        • 2011-12-14
        • 2010-11-20
        • 2017-03-31
        • 1970-01-01
        相关资源
        最近更新 更多