I'm trying to draw sphere with alpha, but I have a problem with my Z-buffer. Some pixels are transparent but write in the Zbuffer so a pixel opaque just behind is hidden.
Here are my settings:
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.
I know the function glAlphaFunc(GREATER, aFloat)
and enable(ALPHA_TEST)
can do that but I read that it's a deprecated function since 3.1 version of OpenGL. How can I do a correct render without using ALPHAFunc? Does someone know a trick, or a way to do this via shaders?
This is very easy to implement in a fragment shader, using the discard
statement to prevent a fragment from being rendered:
uniform float alpha_threshold;
void main() {
vec4 color = ...;
if(color.a <= alpha_threshold) // Or whichever comparison here
discard;
gl_FragColor = color;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With