OpenglES混合粒子而不是背景

Yur*_*riy 7 android blending opengl-es

我有下一个过程:

 - 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
Run Code Online (Sandbox Code Playgroud)

问题 - 当我绘制粒子时,它们还与背景混合并变得非常明亮.

我只需要将颗粒与(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设置为最大值以模拟添加剂混合

在此输入图像描述

它可以很好地工作,你可以看到...除了黑色填充区域,其中粒子图像具有alpha 0 ..并且有什么不好,结果图像中黑色有alpha 1所以我无法以任何方式替换它...

EDIT_2 简单的一般问题:我需要绘制一个红色(0xff0000)发光(添加混合)效果.在黑色背景上它是好的,但如果我采取绿色(0x00ff00)比结果颜色将接近0xffff00

有任何想法吗?

小智 3

GL10.GL_SRC_ALPHA、GL10.GL_ONE 为了突出显示重叠的粒子

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