7

我有下一个过程:

 - 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

有任何想法吗?

4

3 回答 3

3

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

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

于 2011-03-14T23:51:58.427 回答
1

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

于 2011-03-18T09:19:40.933 回答
0

渲染到单独的帧缓冲区会起作用吗?您是否在完全透明的帧缓冲区中添加所有粒子的混合,然后对该帧进行正常的 alpha 混合

于 2011-03-25T15:34:57.343 回答