Альфа-тест OpenGl - Как заменить устаревший AlphaFunc?

Я пытаюсь нарисовать сферу с помощью альфы, но у меня проблема с моим 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 ответ

Это очень легко реализовать в фрагментном шейдере:

uniform float alpha_threshold;

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

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

    gl_FragColor = color;
}
Другие вопросы по тегам