2012-12-16 152 views
1

我繪製了兩個紋理,先是紋理A然後是紋理B.我總是出現A始終高於b,即使紋理A的某些部分是完全透明的,它只顯示背景顏色屏幕。這裏的背景顏色意味着我用glClearColor設置的顏色。然而,我改變了我的代碼和圖片,紋理的透明部分總是具有相同的背景顏色。無法使紋理透明

這是我的着色語言源代碼。

precision mediump float; 
uniform sampler2D u_sampler; 
varying vec2 v_TexCoord; 
void main() { 
    gl_FragColor = texture2D(u_sampler, v_TexCoord); 
} 

而且我已經啓用了混合功能。

glEnable(GL_DEPTH_TEST); 
glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

回答

3

您是否正在使用2繪製調用進行渲染,或者您是否使用了多紋理。如果您將它作爲2次繪製調用進行,則關閉深度測試,因爲第二個紋理將始終不能進行深度測試(因爲它不在多邊形的前面,因此不會被繪製)。

如果你使用多紋理,那麼你的問題可能在於你如何設置alpha。

我真的懷疑它是前者。

+0

您也可以將深度func從GL_LESS切換到GL_LEQUAL。然而,切換到多紋理看起來像比這更好的解決方案。 – Kos

+0

爲什麼我不能投兩次票。這是答案。我已經考慮了兩天,並且非常沮喪。你能給我一些建議,以防止再次發生這種情況。 (我已經閱讀了相當多的日誌文件)。 –

+1

科斯的想法是一個,但是你必須使用兩個繪製調用的完全相同的頂點,否則浮點舍入錯誤會傷害你。通常使用多紋理是最好的計劃。看到這裏的教程:http://nehe.gamedev.net/tutorial/bump-mapping,_multi-texturing_&_extensions/16009/ – Goz