2012-03-20 75 views
1

我正在努力在OpenGL中創建一個透明的GUI,並且試圖通過一些半透明的四邊形渲染文本,但結果很奇怪。OpenGL:奇怪的透明度混合結果

如果我呈現本身的文本,它背後沒有什麼,它看起來罰款:

Text without transparent background

但是,如果我使其背後半透明四(渲染文本之前渲染的四),我得到這個:

Text with transparent background

我有混合設置爲(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)。字體紋理是具有alpha通道中的字符形狀的全白紋理。

在透明度的現有層上執行透明度時,我是否需要做一些特殊的事情?還是有什麼我需要檢查?

+2

你確定alpha在每個字母周圍都是零嗎? – 2012-03-20 20:31:19

+0

+1 to @Nicol Bolas的建議。例如,你的源圖像可能沒問題,但你的圖像加載器可能會搞砸了。 – 2012-03-20 20:49:58

回答

0

你的字體紋理的alpha值似乎是關閉的。對於你想要看不到的紋理元素應該是0,對於可見的紋理元素應該是1(或255字節)。你應該檢查紋理並確保alpha值是正確的。

除了alpha混合,您可以使用alpha測試。這將完全擺脫片段,其alpha值低於某個閾值,並且通常比混合更快。

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

這可能工作,即使你的紋理的Alpha關閉在一些地方,但看起來並不像它在這裏的話,作爲「s」和「T」似乎在地方低阿爾法它應該是1.

0

感謝您的回覆。我的字體紋理沒有錯,但是你的建議讓我嘗試了其他一些東西。原來問題不是透明度。渲染背景四邊形時出現問題,導致它也渲染文本四邊形,但使用背景紋理。 Bah ...