2017-02-16 54 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也是行不通的。对于我所做的事情,我能做的更好的价值越低。 –