OpenGL添加剂混合在没有背景时出现问题

当我使用添加剂(glBlendFunc(GL_ONE,GL_ONE))为粒子系统进行混合时,如果有背景,它看起来很完美,但是当我尝试没有背景时,它会变成黑色。
结果是当不是背景(RGBA(0,0,0,0))时,添加剂会将黑色添加到一起,例如:
RGBA(0,0,0,1)+ background(RGBA(0,0,0,0))= RGBA(0,0,0,1);
所以这就是我得到黑色的原因。

如何做到这一点:

  • 在没有背景的android中运行,但有壁纸。
  • 使用Fbo和Fbo清除颜色为RGBA(0,0,0,0),并使用半透明,然后用添加剂将位图绘制到Fbo。
  • 问题:如何解决这个问题,使位图不会有黑色,或者在没有背景的情况下如何避免这种情况。


    我认为,为了解决您的问题,您需要使用单独的混合,这允许在RGB和Alpha组件上使用不同的因素。

    目前你有这样的东西:

    glBlendEquation(GL_FUNC_ADD);
    glBlendFuncSeparate(GL_ONE, GL_ONE);
    

    你应该试试这个:

    glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD);
    glBlendFuncSeparate(GL_ONE, GL_ONE, GL_ZERO, GL_ONE);
    

    这应该会给你以下结果:

    RGBA(0,0,0,1) + background(RGBA(0,0,0,0)) = RGBA(0,0,0,0);
    

    因为它在内部会执行如下操作:

    result.rgb = src.rgb * 1.0 + dst.rgb * 1.0 = src.rgb + dst.rgb
    result.a = src.a * 0.0 + dst.a * 1.0 = dst.a
    

    所以基本上这将保留目标(从不改变它),同时在RGB组件上进行加法混合。

    glBlendFuncSeparate应该从OpenGLES 2.0开始支持,所以应该在大多数移动设备上支持。

    链接地址: http://www.djcxy.com/p/31841.html

    上一篇: OpenGL Additive blending get issue when no background

    下一篇: Combine Two Translucent Unpremultiplied Textures in Open GL With Blend Modes?