我有下一个过程:
- 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 ..而且结果图像中黑色有alpha 1,所以我无法以任何方式替换它。 ..
EDIT_2 简单的一般问题:我需要绘制一个红色(0xff0000)发光(添加混合)效果。在黑色背景上它是好的,但如果我采取绿色(0x00ff00)比结果颜色将接近0xffff00
有什么想法吗?
答案 0 :(得分:2)
GL10.GL_SRC_ALPHA,GL10.GL_ONE以突出重叠粒子
除了添加剂混合之外没有其他方法可以避免需要对粒子进行分类。如果你仍然想坚持这一点以避免粒子重叠,我建议你在渲染中注入一个渗透控件,这样你就可以减少渲染粒子的亮度,或者你可以降低粒子纹理的亮度。
答案 1 :(得分:1)
您可以使用glAlphaFunc( GL_GREATER, 0 )拒绝粒子中的alpha = 0片段。首先请记住glEnable( GL_ALPHA_TEST )。
答案 2 :(得分:0)
渲染到单独的帧缓冲区是否有效?您是否在完全透明的帧缓冲区中添加了所有粒子的混合,然后执行该帧的正常alpha混合