1

2 つのテクスチャのアルファをブレンドしてみます。最初のテクスチャは何らかの画像で、2 番目のテクスチャは中央が透明な円形の長方形です。この 2 つのテクスチャを混合して、背景の中央が透明な丸になるようにする必要があります。これには、glBlendFunc を使用しようとしましたが、透明な背景全体しか取得できませんでした。つまり、すべての背景が透明になりました。glBlendFunc を介してテクスチャのアルファを混合するにはどうすればよいですか?

4

1 に答える 1

1

1 つの問題は、GLUtils.texImage2D() を使用して Android のビットマップからアルファ テクスチャをロードできないことです。これはよくある問題であり、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.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-08-27T22:13:31.080 に答える