2009-08-24 21 views
2

現在、2Dゲームでブレンドとデプステストを行っています。私がテクスチャを描くとき、​​「上側の」テクスチャは、下側のテクスチャの一部が交差する場合にそれらを削除します。明らかに、テクスチャの透明ピクセルは深度テストの考慮に入れられ、描画された下位テクスチャが交差する場合は、すべての色をクリアします。さらに、アルファブレンディングが正しくレンダリングされません。 OpenGLに透過ピクセルをデプステストに含ませないように指示する関数はありますか?iPhone OpenGL ES:2Dゲーム用に透明ピクセルを持つテクスチャにデプステストを適用する

答えて

2

いいえ、できません。これは、すべてのハードウェア深度テストに当てはまります。

GL(フルまたはES - およびD3D)はすべて同じモデルです。ポリゴンを指定した順序でペイントします。ポリゴンBの前にポリゴンAを描画し、論理的にポリゴンAをポリゴンBの前に配置すると、ポリゴンBは塗りつぶされません(デプステストのおかげ)。

解決策は、現在のビューの原点から最も近いものから順番にポリゴンを描画することです。 2Dゲームでうまくいけば、これは単純な並べ替えでなければなりません(おそらく非常に頻繁に行う必要はないでしょう)。

3Dゲームでは、BSPがこの問題の基本的な解決策です。

3
glEnable(GL_ALPHA_TEST); 
glAlphaFunc(GL_EQUAL, 1.0f); 

これは、完全に不透明以外のアルファを持つすべてのピクセルを破棄します。これらのピクセルは、Zバッファにレンダリングされません。しかし、これはさまざまなZバッファ・パイプラインの最適化に影響を与え、重大な減速を引き起こす可能性があります。 が本当にの場合にのみ使用してください。

0

どのようなタイプのブレンドを使用していますか?

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

アルファ0のフラグメントがデプスバッファに書き込まれないようにする必要があります。

+0

でピクセルを破棄することができますがアルファブレンディングないですZ-試験後行きますか? – noop

2

あなたがシェーダを使用している場合、ブレンド無効にしてみてくださいとアルファ0

if(texColor.w == 0.0) 
    discard; 
関連する問題