2012-12-18 85 views
0

那麼,我正在Modding 2D開源遊戲客戶端,我試圖增加透明度的遊戲對象紋理。它已經讀取並加載Alpha通道。紋理已經加載到openGL中,格式和內部格式與RGBA一樣。OpenGL忽略像素與阿爾法

問題是,當一個像素的alpha通道低於255(或1)時,它不會顯示在屏幕上。它不忽略alpha通道,只顯示RGB,其隱藏像素。 此客戶端使用OpenGL和漸變繪圖。

我已通過調用glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA),glDisable(GL_DEPTH_TEST)glColorMask(1,1,1,1)啓用混合。

+4

是否啓用alpha測試,而不是alpha混合? – JasonD

+0

感謝您的評論。我在整個源代碼中進行了搜索,沒有找到任何啓​​用alpha測試的東西。 –

+0

着色器怎麼樣 - 他們做殺/拋棄? – JasonD

回答

1
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 

該行告訴Open GL如何混合源像素和目標像素。

glDisable(GL_DEPTH_TEST) 

我覺得這是你可能是想錯了,因爲這禁用Z深度測試,你不需要爲2D渲染。

glColorMask(1,1,1,1) 

我不是100%在這個,但我懷疑這隱藏了所有匹配的RGBA指定的像素。 在這種情況下,R = 255,G = 255,B = 255和A = 255的任何像素都不會被渲染。

嘗試使用:

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

renderEverything(); 

glDisable(GL_BLEND); 

希望你能得到它的工作:)