2013-08-27 44 views
1

我尝试混合两个纹理的alpha。首先纹理它的一些图像,第二纹理这是矩形与透明的圆形在中心。我需要混合这两个纹理,以便我的背景与transperent在中心。为此,我尝试使用glBlendFunc,但我只能得到整个透明背景,换句话说,我的背景全部变得透明。我怎样才能通过glBlendFunc混合alpha的纹理?在opengl 2.0中混合alpha 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)启用它,而是用OpenGL ES混合2个纹理一起以最快的方式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); 
}