0

iOS上のOpenGLES2.0で半透明性の問題が発生しています。私のシーンはかなりシンプルです。立方体のグリッドで構成されており、一部は塗りつぶされているように見えますが、その他は半透明になっている必要があります。私はOpenGLをセットアップするために以下のコードから始めました。

glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);

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

これにより、深度テストとカリングが原因で、一部の角度で不正確な透明度がレンダリングされます。以下の2つの画像を参照してください

正しい透明度/カリングおよび深度テストが有効

不正確な透明度/カリングおよび深度テストが有効

カーリングと深度テストを無効にし、アルファテストを有効にしようとしました。結果は正しい透明度ですが、テクスチャはありません(下の画像を参照)。

//glEnable(GL_CULL_FACE);
//glEnable(GL_DEPTH_TEST);
//glDepthFunc(GL_LEQUAL);


glAlphaFunc(GL_GREATER, 0.5);
glEnable(GL_ALPHA_TEST);


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

ここに画像の説明を入力してください

GLKitを使用してテクスチャをロードし、GLKBaseEffectを使用してシーンをレンダリングしています。誰かが最初の画像と同じ結果をすべての視点で正しい透明度で達成する方法のヒントを持っていますか?ありがとうございました :)

4

1 に答える 1

3

主な2つのオプションは次のとおりです。

  1. シーン内のすべてのポリゴンを並べ替え、ポリゴンが他のポリゴンと交差しないことを確認します(ポリゴンを並べ替えることができないため)

  2. 代わりに、加法混色や減法混色など、並べ替えに依存しないブレンドモードを使用してください。

立方体のグリッドが本当に必要な場合は、実際に何かを並べ替えるのではなく、別の順序で立方体をトラバースする必要があるため、レンダリングの順序を任意の視点に適したものに変更するのはそれほど難しいことではありません。

于 2012-12-09T22:44:58.613 に答える