Opengl es WebGL中的alpha函数?

Opengl es WebGL中的alpha函数?,opengl-es,glsl,webgl,Opengl Es,Glsl,Webgl,当alpha低于0.5的碎片被丢弃,alpha高于0.5的碎片被渲染为不透明时,是否可能实现透明效果?据我所知 glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER, 0.5); 这将是我要寻找的,但不幸的是,AlphaFunction没有在WebGL中定义。有解决办法吗 我的问题是,透明片段写入深度缓冲区,从而防止渲染更多片段: 排序不是一个选项,因为有太多的点。使用您的着色器进行排序。在片段着色器的底部,设置输出颜色后: if(gl_FragC

当alpha低于0.5的碎片被丢弃,alpha高于0.5的碎片被渲染为不透明时,是否可能实现透明效果?据我所知

glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.5); 
这将是我要寻找的,但不幸的是,AlphaFunction没有在WebGL中定义。有解决办法吗

我的问题是,透明片段写入深度缓冲区,从而防止渲染更多片段:


排序不是一个选项,因为有太多的点。

使用您的着色器进行排序。在片段着色器的底部,设置输出颜色后:

if(gl_FragColor.a < 0.5)
  discard;
if(gl\u FragColor.a<0.5)
丢弃;

您可以使用discard语句完全丢弃片段着色器中的片段。所以只要从纹理(或其他地方)向上看alpha,然后调用

if(alpha < 0.5)
    discard;
if(α<0.5)
丢弃;
因此,您甚至不需要将alpha传播到颜色,或者您可以使测试依赖于其他内容。这是进行alpha测试的现代方法,因为它在desktop GL 3+中也被弃用。

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