我想渲染几个透明的png文件。我只需要“绝对透明度”,alpha值为1或0。
glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
这就是我目前所拥有的,问题是即使alpha值为0,OpenGL仍会写入深度缓冲区,我该如何避免这种情况?
我是否必须使用深度值对精灵进行排序?我目前正在通过纹理id对我的精灵进行分组,以减少纹理状态的变化。按深度值排序肯定会增加我的纹理状态变化。
答案 0 :(得分:2)
您可以使用alpha测试。
if (col.a <= threshold)
discard;
如果输入像素的alpha值大于阈值,则仅绘制像素。
这在较新的OpenGL版本中已被弃用,但可以通过向片段着色器添加类似内容来轻松模仿:
<newline>