【发布时间】:2011-07-15 05:23:02
【问题描述】:
我有下一个流程:
- 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) 与背景混合。
无效的解决方案:
- 在纹理上绘制效果然后将其应用效果很好...但速度极慢。
- 先画粒子效果再画背景,看起来还可以……但我不能画场景对象,因为它们需要在背景和效果之间
这是显示差异的屏幕。右边的期望结果,左边的粒子与背景混合。
图片:
我将不胜感激...
最新更新: 我能够得到我想要的颜色......但是......(似乎这种方式会让我无处可去) 我用 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
有什么想法吗?
【问题讨论】:
-
渲染到单独的帧缓冲区可以工作吗?您是否在一个完全透明的帧缓冲区中添加所有粒子的混合,然后将该帧缓冲区的正常 Alpha 混合到您的主场景中。
-
是的,它有效。但是很慢,我在 20fps 附近丢失了只切换帧缓冲区
标签: android opengl-es blending