OpenGl alpha测试-如何替换已弃用的alphafuncc



我试图用alpha绘制球体,但我有z缓冲区的问题。有些像素是透明的,但在Zbuffer中写入,因此后面的不透明像素被隐藏。

以下是我的设置:

gl Enable: gl DEPTH_TEST.
gl DepthFunc: gl LEQUAL.
gl Disable: gl CULL_FACE.
gl Enable: gl BLEND. 
gl BlendFunc: gl SRC_ALPHA with: gl ONE_MINUS_SRC_ALPHA.

我知道函数glAlphaFunc(GREATER, aFloat)enable(ALPHA_TEST)可以做到这一点,但我读到它是一个过时的功能,因为3.1版本的OpenGL。我怎么能做一个正确的渲染不使用ALPHAFunc?有人知道一个技巧,或一种方法来做到这一点,通过着色器?

这很容易在片段着色器中实现,使用discard语句来防止片段被渲染:

uniform float alpha_threshold;
void main() {
    vec4 color = ...;
    
    if(color.a <= alpha_threshold) // Or whichever comparison here
        discard;
    
    gl_FragColor = color;
}

相关内容

  • 没有找到相关文章

最新更新