2017-02-16 60 views
0

所以我使用的是OpenGL ES 2.0,我將透明對象渲染成一個在另一個之上,但是如果我在片段着色器中低於0.05,則任何東西都不呈現。我的渲染配置設置爲:GLES 2.0+ Alpha沒有顯示

glClearColor(0, 0, 0, 0); 
glDisable(GL_DITHER); 
glDisable(GL_CULL_FACE); 
glDisable(GL_DEPTH_TEST); 
glDepthMask(false); 
glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE); 

我都試過GL_UNSIGNED_BYTE和GL_UNSIGNED_SHORT_4_4_4_4作爲渲染目標的紋理類型,沒有運氣。

還有什麼我可以做的,以提高alpha值的精度,並融合?以0.05作爲最小alpha值,它只給我20個(1.0/0.05 = 20)值。基本上,我將渲染紋理視爲一組數據,並使用頂點着色器將值添加到不同的像素。

編輯:我使用浮動highp,似乎沒有幫助。

回答

0

你沒有提到你在着色器使用的精密 - 也許你應該將它設置爲highdp(在片段着色器),看看這可以幫助:

precision highp float; 

(如果你需要exatly知道什麼精度你需要,你可以使用glGetShaderPrecisionFormat)

+0

你不應該需要highp;中性(fp16)足夠精確,足以處理更多精度小於2dp的小數位數。 – solidpixel

+0

好吧,無論什麼原因,它只是在低於0.05的任何情況下都不起作用,因爲0.049也是行不通的。對於我所做的事情,我能做的更好的價值越低。 –