2

8ビットのアルファチャネルを持つテクスチャをレンダリングするのに問題があります。つまり、1ビットにフラット化され、glBlendFunc()は何もしていないようです。

即時モードの呼び出しは次のとおりです。

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


glBegin(GL_QUADS);
{

    glTexCoord2f(0, 0);
    glVertex2f(0, 0);

    glTexCoord2f(1, 0);
    glVertex2f(356, 0);

    glTexCoord2f(1, 1);
    glVertex2f(356, 356);

    glTexCoord2f(0, 1);
    glVertex2f(0, 356);

}

glEnd();

言うまでもなく、舞台裏で設定されているさまざまなOpenGL状態があり、明らかにそのうちの1つです。

ブレンド段階を妨げる可能性があることに気付いていない状態はありますか?

私はblendfuncを正しく持っていますか?それは私が見たインターネットページからは正しいようです-しかし、私はGDEBuggerでテクスチャをチェックしたので、画像は間違いなく8ビットのアルファチャネルでロードされ、アルファチャネルなしで1ビットの画像を試しましたアルファチャネル。

どんな助けでも大歓迎です!


編集:

回答への回答:私はSOIL画像読み込みライブラリを使用しています。そのソースを調べて、それがどのように機能するかを確認します。現在、私はすでにレンダリングされたシーンの上にこの画像をレンダリングしています-間違いなく深度の問題に直面していません-実際、深度バッファテストはオフになっています。

4

2 に答える 2

1

透明度は、最も遠いものから最も近いものへとソートされたプリミティブを使用したブレンド関数(GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA)を使用して実装するのが最適です。

ポリゴンが後ろから前に並べ替えられていることを確認します。そうしないと、ブレンドによって誤った効果が発生します。

また、テクスチャをロードするときに、glTexImage2Dの呼び出しでGL_RGBAまたはGL_BGRAが使用されていることを確認します。

編集:

また、glEnable(GL_ALPHA_TEST)を使用し、glAlphaFuncを使用してアルファ関数を設定することを忘れないでください。

http://www.gamedev.net/topic/105082-glalphafunc/

于 2011-01-13T15:21:20.057 に答える
0

別の重要な部分を投稿しませんでした。それは、テクスチャをどのように作成および構成したかということです。そして、問題はあなたが投稿したコードではなく、そこにあると思います。

上記の場合にブレンディングを機能させるには、テクスチャでアルファチャネルを有効にする必要があります。

于 2011-01-13T15:20:03.527 に答える