在opengl es 2.0中混合alpha

时间:2013-08-27 19:27:03

标签: android opengl-es

我尝试混合两个纹理的alpha。首先纹理它一些图像,第二纹理这是矩形,中心有透明圆形。我需要混合这两个纹理,以便结果我的背景与中心的transperent圆。为此,我尝试使用glBlendFunc,但我只能获得整个透明背景,换句话说,我的所有背景都变得透明。如何通过glBlendFunc混合纹理alpha?

1 个答案:

答案 0 :(得分:1)

一个问题是你无法使用GLUtils.texImage2D()从Android上的位图加载alpha纹理。这是Google真正应该更好地记录的常见问题。问题是Bitmap类将所有图像转换为预乘格式,但这不适用于OpenGL ES,除非图像完全不透明。本文提供了更多详细信息:

http://software.intel.com/en-us/articles/porting-opengl-games-to-android-on-intel-atom-processors-part-1

要使用glBlendFunc(),必须首先使用glEnable(GL_BLEND)启用它,但是将2个纹理与OpenGL ES 2.0混合在一起的最快方法是在片段着色器中执行此操作。这是一个简单的例子:

uniform sampler2D sampler2d_0;
uniform sampler2D sampler2d_1;
varying mediump vec2 texCoord;

void main()
{
    vec3 vTexture0 = texture2D(sampler2d_0, texCoord);
    vec3 vTexture1 = texture2D(sampler2d_1, texCoord);
    vec3 vColor = mix(vTexture0, vTexture1, alpha);

    gl_FragColor = vec4(vColor, 1.0);
}