2011-01-13 104 views
1

我有一些麻煩渲染具有8位alpha通道的紋理 - 即,它被平化爲1位,glBlendFunc()似乎沒有做任何事情。OpenGL多位Alpha紋理

這裏是直接模式的呼叫:

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狀態已設定在幕後,並明確一個

有沒有我不知道的狀態會干擾混合階段?

我有blendfunc嗎?這似乎是正確的從我看過的互聯網網頁 - 我已經檢查了GDEBugger的紋理,所以圖像確實已經加載了一個8位阿爾法通道,以及嘗試圖像沒有alpha通道和一個位alpha通道。

任何幫助將不勝感激!


編輯:

在回答的答案:我使用的土壤圖像加載庫,我要把通過其源看看,看看它是如何做的事情。現在,我只是將這個圖像渲染到已經渲染的場景的頂部 - 它絕對不是深度問題 - 事實上深度緩衝區測試已關閉。

+1

看起來正確,有什麼不看的權利是你的紋理代碼,發佈您的通話glTexImage2D。 – 2011-01-13 15:22:23

+0

正如我所說,它通過一個庫 - 我可能會嘗試找到並示例alpha圖像加載器並嘗試它 - 應該更快地重建靜態和調試它通過 – Tomas 2011-01-13 15:41:39

回答

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/

0

你沒有發佈另一個重要的部分,那是你如何創建和配置你的紋理。我認爲問題出在那裏,而不是你發佈的代碼。

爲了使混合在上述情況下起作用,必須在紋理中啓用Alpha通道。