OpenGl alpha测试 - 如何替换AlphaFunc已被弃用?

时间:2014-06-19 08:33:34

标签: opengl alpha depth-testing

我试图用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的情况下进行正确的渲染?有人知道一个技巧,或通过着色器做到这一点的方法?

1 个答案:

答案 0 :(得分:11)

在片段着色器中很容易实现:

uniform float alpha_threshold;

void main() {
    vec4 color = ...;

    if(color.a <= alpha_threshold) // Or whichever comparison here
        discard;

    gl_FragColor = color;
}