2011-07-28 86 views
1

我試圖把一個簡單的程序放在一起,只顯示兩個互相重疊的紋理四邊形,並且紋理具有alpha通道。在OpenGL 3 +中混合紋理四邊形的過程?

我已經成功地獲得了四邊形本身來顯示,除了透明度外,紋理看起來是正確的。

關於這個主題,GL_BLEND標誌似乎根本沒有做任何事情,無論它是否啓用。當着色器被使用時,這個特殊的標誌是不適用的嗎?

我知道alpha正在被正確渲染的事實,因爲如果我設置out_color = texture.aaaa,我會得到一個匹配原始紋理的黑/白/灰的好圖案。

因此,如果GL_BLEND不起作用,那麼通常的alpha混合工作方法是什麼?

回答

3

glEnable(GL_BLEND)所做的就是打開和關閉混合。它沒有說明混合會做什麼;這由various blending functions控制。如果你想有一個典型的阿爾法透明混合,你這樣做:

glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD); 
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); 

如果使用預乘α(和你應該),你會做:

glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD); 
glBlendFuncSeparate(GL_ONE, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); 
+0

我最初使用'glBlendFunc (GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);'設置它(基於我閱讀文檔),但我也嘗試過,但我仍然遇到同樣的問題。它似乎是「有點」透明的,因爲四邊形在透明部分獲得背景顏色(黑色),但不會在相互之間顯示四邊形。所以基本上,四邊形的額外空間不知何故充滿了不透明的黑色。 – Kozaki

+1

@Kozaki:這是一個透明度的問題,它需要[按正確的順序渲染對象。](http://www.opengl.org/wiki/Transparency_Sorting) –

+0

啊,這是我的facepalming。我可以發誓我已經把所有東西都分類了,但我沒有。一切終於有效!非常感謝你! – Kozaki