3

Android の OpenGL ES 2 でブレンディングが適切に機能しないようです。私が持っているのは、対応するアルファで表示したいアルファチャンネルを持つテクスチャです。一番上に描画されたオブジェクトのアルファが 1.0 の場合でも、ブレンドは加算的に表示されます。フラグメント シェーダーでアルファ値 1.0 をハードコーディングしたところ、アルファ値ではなくcolorを使用しているように見えました。

たとえば、次のようになります。ここに画像の説明を入力

これの代わりに :ここに画像の説明を入力

私は正しい順序で描いています。この例では、青は灰色の正方形の上で完全に不透明になっているはずです。複数の描画モード (one,one)、(alpha,alpha) など、複数の描画順序、深度テストの使用と非使用を試しました。ランダム ブレンド モードを試してみましたが、結果が正しくないため、設定するとブレンドが変化します。

問題は、opengl が加法混色であることだと思います。(アルファ、アルファ) は私には理にかなっています。シェーダーで明示的にアルファを 1.0 に設定すると、青い円が描かれた正方形 (テクスチャが投影される実際の形状) が得られると思います。これが起こっていないのは私を困惑させます.sfactorとdfactorのブレンド機能を十分に理解していないと思います.

4

1 に答える 1

3

Android Bitmap クラスを使用してテクスチャをロードしていますか?

Android で GLUtils.texImage2D() を使用してビットマップからアルファ テクスチャをロードすると、問題が発生します。これは、Google がより適切に文書化する必要がある問題です。問題は、Bitmap クラスがすべての画像をあらかじめ乗算された形式に変換することですが、画像が完全に不透明でない限り、OpenGL ES では機能しません。

この記事では、ここをクリックして詳細を説明します。

于 2013-11-02T17:11:46.590 に答える