OpenGL(libgdx) - 混合alpha映射

时间:2015-05-14 09:07:09

标签: opengl libgdx blending

我正在尝试将具有不同alpha值的白色纹理与彩色背景混合。我期待结果保留背景颜色,并将alpha值替换为混合纹理中的颜色。

所以,对于我使用的背景:

Gdx.gl.glEnable(GL20.GL_BLEND);
Gdx.gl.glBlendEquationSeparate(GL20.GL_FUNC_ADD, GL20.GL_FUNC_ADD);
Gdx.gl.glBlendFuncSeparate(GL20.GL_ONE, GL20.GL_ZERO, GL20.GL_ONE, GL20.GL_ZERO);

我希望背景三角形网格覆盖目标,包括颜色和alpha。

问题1 - 为什么使用这些blendFunc参数,alpha值被忽略? 如果我将blendfunc设置为GL_ONE,GL_ONE,GL_ZERO,GL_ZERO,那么填充的网格将以适当的alpha级别渲染 - 但源和目标alpha都应该乘以零 - 为什么这会起作用?

====

现在混合我使用的alpha贴图:

Gdx.gl.glBlendEquationSeparate(GL20.GL_FUNC_ADD, GL20.GL_FUNC_ADD);
Gdx.gl.glBlendFuncSeparate(GL20.GL_ZERO, GL20.GL_ONE, GL20.GL_ONE, GL20.GL_ZERO);

问题2 - 这应该保留目标颜色并替换alpha。但是,当我用这些blendfunc参数渲染纹理时,我根本没有改变输出......

我一遍又一遍地阅读opengl混合章节以了解我无法理解的内容,请分享您对这些参数实际工作原理的见解

1 个答案:

答案 0 :(得分:0)

我用这个:

Gdx.gl.glEnable(GL20.GL_BLEND);
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);

它只能按渲染顺序工作。为了考虑深度,您需要进行libGDX不包括的alpha测试。