【问题标题】:Blending alpha in opengl es 2.0在 opengl es 2.0 中混合 alpha
【发布时间】:2013-08-27 19:27:02
【问题描述】:

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

【问题讨论】:

    标签: android opengl-es


    【解决方案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) 启用它,但是使用 OpenGL ES 2.0 将 2 个纹理混合在一起的最快方法是在片段着色器中进行。这是一个简单的例子:

    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-11-16
      • 1970-01-01
      • 2015-08-08
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 2020-09-05
      相关资源
      最近更新 更多