2

そのため、Android で OpenGL ES 2.0 をいじっていましたが、解決できなかった問題が発生しました。事前にお詫び申し上げます。(まだ) 2 つ以上のリンクを投稿することは許可されていないようです。そのため、3 つの画像をここの Photobucket アルバムに入れます。

透明な領域 (「色ガラス」) で囲まれた 3D 環境を作成しようとしています。それが機能するかどうかを確認するために、不透明な立方体も中に入れました. 次の機能を有効にしました。

GLES20.glEnable(GLES20.GL_CULL_FACE);
GLES20.glEnable(GLES20.GL_DEPTH_TEST);
GLES20.glEnable(GLES20.GL_BLEND);
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);

画像は次のようになります (スクリーンショット 1)。悪くはありませんが、私が望んでいた方法とは異なります。私が見ている壁は透明であるため、右側の壁だけでなく、背面の (下の) 壁も見えるはずです。

次に、それを見つけGLES20.glDepthMask(true);、不透明なオブジェクトを描画する前と透明なオブジェクトを描画する前に使用してみましたGLES20.glDepthMask(false);。また、不透明なオブジェクトの描画中にブレンドを無効にしました。

結果 (スクリーンショット 2) は、かなりめちゃくちゃに見えます。GLES20.DEPTH_TESTしかし、透明なオブジェクトを描画している間、深度バッファへの書き込みをオフにするのではなく、完全にオフにするという別のアイデアがありました。

それ(スクリーンショット3)は、私が探している写真に最も近づきました。最終的に後壁と右の側壁が表示されますが、不透明を描画するときに深度テストが無効になっているため、立方体が後壁で部分的に覆われていますが、そうであってはなりません。

私が探している効果を得る方法を知っている人はいますか?

4

1 に答える 1

1

解決したと思います。つまり、私の場合は機能しますが、それが偶然かどうかはわかりません...

いつものように深度テストとブレンディングを有効にしています。次に、描画するときは、前と同じように、最初に不透明な形状を描画し、次に透明な形状を描画します。ただし、透明な形状を描画している間GLES20.glDepthMask(..)は、深度バッファーに書き込まないようにオフにして、不透明な形状で覆われていないすべての透明な形状を描画します。私は以前にそれを行いましたが(写真2)、完全に台無しになりましたが、今は逆に行います-不透明なものではなく透明な形状の深度マスクを無効にします.

于 2013-11-09T08:25:57.223 に答える