我想渲染几个彼此透明的png文件。我只需要alpha值为1或0的“绝对透明”。
glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
这就是我目前所拥有的,问题是即使alpha值为0,OpenGL仍然会写入深度缓冲区,如何避免这种情况?
我是否必须使用深度值对子画面进行排序?我目前正在按纹理ID对我的精灵进行分组,以减少纹理状态的变化。按深度值排序肯定会增加我的纹理状态变化。
最佳答案
您可以使用Alpha测试。
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, threshold);
仅当输入像素的alpha值大于阈值时才绘制像素。
在较新的OpenGL版本中不推荐使用此方法,但可以通过将以下内容添加到片段着色器中来轻松模拟:
if (col.a <= threshold)
discard;
关于c++ - 避免写入Alpha值为0的深度缓冲区,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34368679/