我正在尝试用 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)
and enable(ALPHA_TEST)
可以做到这一点,但我读到它是自 OpenGL 3.1 版本以来已弃用的函数。如何在不使用 ALPHAFunc 的情况下进行正确的渲染?有人知道一个技巧,或者通过着色器来做到这一点的方法吗?
这在片段着色器中很容易实现,使用discard
阻止片段渲染的语句:
uniform float alpha_threshold;
void main() {
vec4 color = ...;
if(color.a <= alpha_threshold) // Or whichever comparison here
discard;
gl_FragColor = color;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)