Android の OpenGL ES 2 でブレンディングが適切に機能しないようです。私が持っているのは、対応するアルファで表示したいアルファチャンネルを持つテクスチャです。一番上に描画されたオブジェクトのアルファが 1.0 の場合でも、ブレンドは加算的に表示されます。フラグメント シェーダーでアルファ値 1.0 をハードコーディングしたところ、アルファ値ではなくcolorを使用しているように見えました。
たとえば、次のようになります。
これの代わりに :
私は正しい順序で描いています。この例では、青は灰色の正方形の上で完全に不透明になっているはずです。複数の描画モード (one,one)、(alpha,alpha) など、複数の描画順序、深度テストの使用と非使用を試しました。ランダム ブレンド モードを試してみましたが、結果が正しくないため、設定するとブレンドが変化します。
問題は、opengl が加法混色であることだと思います。(アルファ、アルファ) は私には理にかなっています。シェーダーで明示的にアルファを 1.0 に設定すると、青い円が描かれた正方形 (テクスチャが投影される実際の形状) が得られると思います。これが起こっていないのは私を困惑させます.sfactorとdfactorのブレンド機能を十分に理解していないと思います.