Альфа-тест 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;
}