OpenGL ES - 混合粒子效果

时间:2009-10-20 20:09:13

标签: iphone opengl-es

所以我的粒子系统已启动并运行,只要背景很暗,它看起来很棒。我的问题是我需要在浅色背景上渲染效果。我一直在尝试glBlendFunc的许多不同的设置,但无法弄清楚如何让它工作。我当前的混合是glBlendFunc(GL_SRC_ALPHA,GL_ONE),您可以在下面的图像中找到不那么令人满意的结果。如何在浅色背景上渲染效果?

illustration of the question
(来源:babelstudios.se

2 个答案:

答案 0 :(得分:3)

如果你有一个带有alpha的正常ol'纹理,并且你是按照从前到后的顺序渲染的,那么这就是你要做的:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

如果您的纹理具有预乘alpha,并且您是按照从前到后的顺序渲染,请改为:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)

答案 1 :(得分:0)

来自opengl.org

  

您可能想要使用Alpha值   纹理映射的结果   混合功能。如果是这样,   (GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)   始终是一个很好的功能   用。

     

但是,如果要进行混合   当图元被纹理映射时   (即,你想要部分纹理   map允许底层颜色   然后是原始的展示   不要使用OpenGL混合。代替,   你使用glTexEnv(),然后设置   纹理环境模式为GL_BLEND。   在这种情况下,你想离开   纹理环境的颜色   默认值为(0,0,0,0)。