所以我的粒子系统已启动并运行,只要背景很暗,它看起来很棒。我的问题是我需要在浅色背景上渲染效果。我一直在尝试glBlendFunc的许多不同的设置,但无法弄清楚如何让它工作。我当前的混合是glBlendFunc(GL_SRC_ALPHA,GL_ONE),您可以在下面的图像中找到不那么令人满意的结果。如何在浅色背景上渲染效果?
(来源:babelstudios.se)
答案 0 :(得分:3)
如果你有一个带有alpha的正常ol'纹理,并且你是按照从前到后的顺序渲染的,那么这就是你要做的:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
如果您的纹理具有预乘alpha,并且您是按照从前到后的顺序渲染,请改为:
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
答案 1 :(得分:0)
您可能想要使用Alpha值 纹理映射的结果 混合功能。如果是这样, (GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) 始终是一个很好的功能 用。
但是,如果要进行混合 当图元被纹理映射时 (即,你想要部分纹理 map允许底层颜色 然后是原始的展示 不要使用OpenGL混合。代替, 你使用glTexEnv(),然后设置 纹理环境模式为GL_BLEND。 在这种情况下,你想离开 纹理环境的颜色 默认值为(0,0,0,0)。