我尝试混合两个纹理的alpha。首先纹理它一些图像,第二纹理这是矩形,中心有透明圆形。我需要混合这两个纹理,以便结果我的背景与中心的transperent圆。为此,我尝试使用glBlendFunc,但我只能获得整个透明背景,换句话说,我的所有背景都变得透明。如何通过glBlendFunc混合纹理alpha?
答案 0 :(得分:1)
一个问题是你无法使用GLUtils.texImage2D()从Android上的位图加载alpha纹理。这是Google真正应该更好地记录的常见问题。问题是Bitmap类将所有图像转换为预乘格式,但这不适用于OpenGL ES,除非图像完全不透明。本文提供了更多详细信息:
要使用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);
}