2011-09-01 38 views
4

是否可以实现透明度效果,其中alpha小于0.5的片段被丢弃,而alpha大于0.5的片段则呈现不透明?从我读过,WebGL中的AlphaFunctions?

glEnable(GL_ALPHA_TEST); 
glAlphaFunc(GL_GREATER, 0.5); 

将是什么我要找的,但不幸的是,AlphaFunction不WebGL的定义。有没有解决方法?

我的问题是,透明的片段写入深度缓冲区,从而避免进一步碎片beeing呈现: alpha_error http://gebackene-ente.at/nudelsalat/sonstiges/pointcloud_alphaerror.jpg

排序是不是一种选择,因为有太多的分。

回答

12

使用着色器来做到这一点。在设置输出颜色后,在片段着色器的底部:

if(gl_FragColor.a < 0.5) 
    discard; 
+0

这太好了,谢谢!再次! – Markus

+1

注意,您必须在设置输出颜色后将“丢弃”放在底部,正如Nicol Bolas所说。在某些情况下,放弃“放弃”似乎被忽略。 –

4

您可以使用discard语句完全丢弃片段着色器中的片段。所以只要看看那里的α从纹理(或其他地方),然后就打电话

if(alpha < 0.5) 
    discard; 

所以,你甚至都不需要阿尔法传播到颜色,也可以让测试依赖于别的东西。这是进行alpha测试的现代方式,因为它在桌面GL 3 +中也被弃用。