代码之家  ›  专栏  ›  技术社区  ›  DavidG

glBlendFunc和alpha混合

  •  2
  • DavidG  · 技术社区  · 17 年前

    我想知道glBlendFunc是如何工作的。例如,我有2个gl纹理,其中alpha在tex1上,我想在最终图像中有alpha。当颜色在tex1上时,我希望tex2的颜色是。

    4 回复  |  直到 17 年前
        1
  •  1
  •   da01    17 年前

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

        2
  •  1
  •   akalenuk    17 年前

    抱歉,不能用简单的混合来做到这一点。例如,我们过去常常使用框架着色器做同样的事情。

        3
  •  1
  •   BigSandwich    17 年前

    支持着色器。如果你能使用着色器,那么你就可以更容易地对数据做你想做的事情,而不是摆弄晦涩的混合函数。

        4
  •  0
  •   DavidG    17 年前

    可悲的是,这是针对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
    

    即使它有纹理,有颜色也意味着它增加了纹理的颜色,所以当它是阿尔法时,它仍然是阿尔法,当它是白色时(正如我必须做的那样),它就变成了该点的颜色指针的颜色。