2012-03-20 8 views
1

私はOpenGLで透明なGUIを作成しようとしていますが、半透明のクワッドでレンダリングしようとしていますが、結果は奇妙です。OpenGL:奇妙な透明度のブレンドの結果

私は自分自身でテキストをレンダリングする場合は、その背後に何もして、それが正常に見える:

Text without transparent background

私はその背後にある半透明のクワッドをレンダリングする場合は、(テキストをレンダリングする前にクワッドをレンダリング私は(GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA)にブレンドセットを持って

Text with transparent background

:)、私はこれを取得します。フォントテクスチャは、アルファチャンネルに文字の形をした全白テクスチャです。

透明画の既存のレイヤーに対してアルファ透明度を実行するときに特別なことをする必要がありますか?それとも、チェックする必要がある何か他にありますか?

+2

アルファが各文字の周りにゼロであることは確かですか? –

+0

+1 @ニコル・ボラスの提案。例えば、あなたのソースイメージは問題ないかもしれませんが、あなたのイメージローダーが物事を狂わせている可能性があります。 –

答えて

0

フォントテクスチャのアルファ値がオフのようです。目に見えないテクセルの場合は0、可視テクセルの場合は1(または255バイト)にします。テクスチャをチェックし、アルファ値が正しいことを確認する必要があります。

アルファブレンディングの代わりに、アルファテストを使用できます。これは、ある閾値以下のアルファ値を持つフラグメントを完全に取り除き、しばしばブレンドよりもはるかに高速です。

glDisbale(GL_BLEND);  
glEnable(GL_ALPHA_TEST); 
glAlphaFunc(GL_GREATER, 0.96f); // Or some fitting threshold for your texture 

これは「S」と「t」は場所で低アルファを持っているように見えるとして、あなたのテクスチャのアルファは、いくつかの場所でオフになっているが、それはここではそうであるように見えない場合でも、うまくいくかもしれませんここでは1にする必要があります。

0

ありがとうございます。私のフォントテクスチャには何も問題はありませんでしたが、あなたの提案は私に何か他のことを試してもらった。問題は透明性ではないことが判明しました。バックグラウンドクォードをレンダリングする際に問題があり、それによってテキストクワッドもレンダリングされましたが、バックグラウンドテクスチャを使用していました。 Bah ...