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)与背景混合。
不工作解决方案:
这里是显示差异的屏幕。 在正确的结果上,左边的颗粒与背景混合。
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