Android 打开混合粒子但不混合背景
我有下一个过程:Android 打开混合粒子但不混合背景,android,opengl-es,blending,Android,Opengl Es,Blending,我有下一个过程: - 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 问题-当我绘制粒子时,它们
- 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)将所有粒子与背景混合
无效解决方案:
- 将效果绘制到纹理,然后应用它,效果很好…但速度非常慢李>
- 先画粒子效果,然后再画背景,看起来还可以…但我不能画场景对象,因为它们需要介于背景和效果之间
除了添加剂混合之外,没有其他方法可以避免对颗粒进行分类。如果您仍然希望坚持使用此选项以避免粒子重叠,我建议您在渲染中插入“bleding”控件,以便可以降低渲染粒子的亮度或降低粒子纹理的亮度。您可以使用此选项拒绝粒子中的alpha=0碎片。但是,请记住首先。渲染到单独的帧缓冲区是否可行?你是否在一个完全透明的帧缓冲区中添加所有粒子的混合,然后对该帧进行正常的alpha混合我已尝试降低粒子纹理的亮度,但它不起作用,纹理主要是红色(接近0xee)和少量的吉恩、蓝色。在与bg混合的过程中,红色只增加了一点,因为它几乎达到最大值,但绿色和蓝色显著增加。因为该颜色被破坏。您能解释一下“在渲染中注入一个出血控件以便减少渲染粒子的亮度”是什么意思吗?我假设您使用的是ES 1.0,您可以通过将glColor*设置为所需的值来进行简单的多重渲染,它与您使用纹理颜色设置的颜色混合,使您可以对渲染颜色进行精细控制。因此设置glColor4f(0.5,0.5,0.5,1.0);将纹理亮度降低一半。目前我正在使用glColor为粒子添加淡出和生命周期中的颜色变化。我尝试过使用它。但问题与更改纹理颜色相同-它会降低亮度,但由于与bg混合,颜色仍然会中断。在我自己的引擎中,我通过添加混合+alpha belnding+关闭深度写入()实现了这一点。你应该先尝试用glBlendFunc(GL_SRC_alpha,GL_ONE_减去_SRC_alpha)进行简单的alpha混合,以获得所需的混合结果。好主意,Ryanm,这有助于去除黑色像素。但仍然存在一个问题。在效果的边缘有很多像素,它们的alpha值很低,但不是零。这些像素应该与背景混合,比如GL10.GL_SRC_ALPHA、GL10.GL_ONE_减去SRC_ALPHA。如果我有着色器,它会比..简单,但这里只有1.1…渲染到单独的帧缓冲区会工作吗?在一个完全透明的帧缓冲区中添加所有粒子的混合,然后在主场景中进行该帧缓冲区的正常alpha混合。是的,它可以工作。但速度非常慢,我只切换帧缓冲区,速度接近20fps