OpenglES混合粒子,但不是背景

我有下一个过程:

 - draw background
 - draw objects and blend with background (1)GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA
 - draw particle effect with blending (2)GL10.GL_SRC_ALPHA, GL10.GL_ONE in order to highlight overlapping particles

问题 - 当我画出粒子时,它们会与背景混合并变得非常明亮。

简单地说,我需要的是将粒子与(2)混合在一起,然后使用(1)与背景混合。

不工作解决方案:

  • 对纹理的绘制效果和应用它的效果很好......但速度非常慢。
  • 首先绘制粒子效果和背景,它看起来不错,但我无法绘制场景对象,因为它们需要在bg和效果之间
  • 这里是显示差异的屏幕。 在正确的结果上,左边的颗粒与背景混合。

    IMG:

    在这里输入图像描述

    我会感谢任何帮助...

    最新的更新:我能够得到我想要的颜色...但是...(似乎这种方式将使我无法移动)我使用alpha = 0渲染背景,并使用来自GL11Ext的混合函数:glBlendFuncSeparate(GL10.GL_SRC_ALPHA, GL10.GL_DST_ALPHA,GL10.GL_ONE,GL10.GL_ONE);

    GL10.GL_SRC_ALPHA,GL10.GL_DST_ALPHA - 仅当颜色具有alpha时才会混合颜色(bg现在不存在)

    GL10.GL_ONE,GL10.GL_ONE - 对于所有书写的粒子,alpha设置为最大值以模拟添加混合

    在这里输入图像描述

    它可以正常工作,因为你可以看到...除了黑色填充区域,其中粒子图像具有阿尔法0 ...以及在结果图像中黑色具有阿尔法1的什么不好...所以我无法以任何方式替换它...

    编辑_2一般问题简单的话:我需要绘制一个红色(0xff0000)发光(叠加混合)效果。 在黑色背景上是可以的,但如果我将采取绿色(0x00ff00)比结果颜色将接近0xffff00

    有任何想法吗?


    GL10.GL_SRC_ALPHA,GL10.GL_ONE为了突出重叠的粒子

    除了添加剂混合以外,没有其他方法可以避免对颗粒进行分类。 如果你仍然想坚持这个以避免粒子的重叠,我建议你在渲染中注入一个blelling controll,这样可以降低渲染粒子的亮度,或者可以降低粒子纹理的亮度。


    您可以使用glAlphaFunc(GL_GREATER,0)来拒绝粒子中的alpha = 0片段。 首先记住glEnable(GL_ALPHA_TEST)。


    渲染到一个单独的帧缓冲区工作? 你是否将所有粒子混合在一个完全透明的帧缓冲区中,然后进行该帧的正常阿尔法混合

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

    上一篇: OpenglES blending particles but not background

    下一篇: Sql: average of a dates