避免使用alpha值为0的深度缓冲区写入

时间:2015-12-19 08:05:36

标签: c++ opengl

我想渲染几个透明的png文件。我只需要“绝对透明度”,alpha值为1或0。

Example

  glEnable(GL_DEPTH_TEST);
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

这就是我目前所拥有的,问题是即使alpha值为0,OpenGL仍会写入深度缓冲区,我该如何避免这种情况?

我是否必须使用深度值对精灵进行排序?我目前正在通过纹理id对我的精灵进行分组,以减少纹理状态的变化。按深度值排序肯定会增加我的纹理状态变化。

1 个答案:

答案 0 :(得分:2)

您可以使用alpha测试。

if (col.a <= threshold)
    discard;

如果输入像素的alpha值大于阈值,则仅绘制像素。

这在较新的OpenGL版本中已被弃用,但可以通过向片段着色器添加类似内容来轻松模仿:

<newline>