iPhoneのOpenGL ES:2Dゲームのための透明ピクセルを持っているテクスチャにデプステストを適用します

StackOverflow https://stackoverflow.com/questions/1320399

質問

現在、私はブレンドがあり、デプステストは、2Dゲームのためにオンにします。私は私のテクスチャを描くと、それらが交差する場合、「上」のテクスチャは、下のテクスチャの一部を削除してください。明らかに、テクスチャの透明ピクセルは、深度テストの考慮され、それらが交差する場合には、描かれた下のテクスチャのすべての色をクリア。また、アルファblendingsが正しくレンダリングされます。デプステストに透明なピクセルを含まないようにOpenGLを伝えることができる機能の任意の並べ替えがありますか?

役に立ちましたか?

解決

はありませんそれは不可能です。これは、すべてのハードウェアデプステストの真のです。

GL(フルまたはES - とD3D)はすべて同じモデルを持っている - 彼らはあなたがポリゴンを指定するためにペイント。あなたはポリゴンBの前に、論理的にポリゴンBの前にあるべきポリゴンにポリゴンAを描画する場合は、ポリゴンBは(デプステストの礼儀を)塗装されることはありません。

ソリューションは、最も遠いから現在のビューの原点最寄りするために、あなたのポリゴンを描画することです。幸い2Dゲームで、これは単純なソート(あなたはおそらく非常に頻繁に行う必要はありません1)である必要があります。

3DゲームでのBSPは、この問題への基本的なソリューションです。

他のヒント

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

これは完全に不透明以外のアルファにすべてのピクセルを破棄します。これらの画素は、その後、Zバッファにレンダリングされることはありません。それはいくつかの深刻な速度低下を引き起こす可能性がありので、これは、しかし、様々なZバッファのパイプラインの最適化に影響を与えません。あなたがを場合にのみ、それを使用し、本当にの持つすぎます。

あなたがシェーダを使用している場合、ブレンド無効にしてみてくださいとアルファ0でピクセルを破棄することができます。

if(texColor.w == 0.0)
    discard;

は、使用しているブレンドの何種類?

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

デプスバッファへの書き込み0のアルファを持つ任意のフラグメントを防止する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top