1

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

4

1 回答 1

1

一个问题是您不能使用 GLUtils.texImage2D() 从 Android 上的位图加载 alpha 纹理。这是谷歌真正应该更好地记录的常见问题。问题是 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);
}
于 2013-08-27T22:13:31.080 回答