1

最初にテクスチャ A、次にテクスチャ B の 2 つのテクスチャを描画します。A は常に b の上にあり、テクスチャ A の一部が完全に透明であっても、画面の背景色が表示されるだけです。ここでの背景色は、 で設定した色を意味しglClearColorます。しかし、コードと画像を変更しても、テクスチャの透明部分は常に同じ色の背景色になります。

これが私のシェーダー言語のソース コードです。

precision mediump float;
uniform sampler2D u_sampler; 
varying vec2 v_TexCoord;
void main() {
    gl_FragColor = texture2D(u_sampler, v_TexCoord);
}

そして、私はすでにブレンド機能を有効にしています。

glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
4

1 に答える 1

3

これを 2 つの描画呼び出しでレンダリングしていますか、それともマルチテクスチャを使用していますか。2 つの描画呼び出しとして実行している場合は、深度テストをオフにします。これは、2 番目のテクスチャが常に深度テストに失敗し (同じ場所のポリゴンの前にないため)、描画されないためです。

マルチテクスチャを使用している場合、問題はおそらくアルファの設定方法にあります。

私は本当に前者を疑っています。

于 2012-12-16T12:25:42.943 に答える