【发布时间】:2014-08-09 17:29:43
【问题描述】:
我正在尝试使用 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 的情况下进行正确的渲染?有人知道一个技巧,或者通过着色器做到这一点的方法吗?
【问题讨论】:
-
在现代 GL 中,您应该在片段着色器中执行此操作,例如
if(result.a > threshold) discard;. -
您的问题与此非常相似:stackoverflow.com/questions/23280692/…。我暂时不建议将其作为副本,因为它的用例略有不同。但是我在那个问题上的回答应该仍然适用于你的情况。
标签: opengl alpha depth-testing