我尝试混合两个纹理的 alpha。第一个纹理它一些图像,第二个纹理这是中心透明圆形的矩形。我需要混合这两种纹理,这样我的背景就会在中心有透明的圆形。为此,我尝试使用 glBlendFunc,但我只能获得整个透明背景,换句话说,我的所有背景都变得透明。如何通过 glBlendFunc 混合纹理的 alpha?
问问题
661 次
1 回答
1
一个问题是您不能使用 GLUtils.texImage2D() 从 Android 上的位图加载 alpha 纹理。这是谷歌真正应该更好地记录的常见问题。问题是 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);
}
于 2013-08-27T22:13:31.080 回答