2015-12-19 54 views
0

我想渲染几个透明度相同的png文件。我只需要“绝对透明”与阿尔法值为1或0避免使用alpha值为0的深度缓冲区写入

Example

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

这是我目前有什么,问题是OpenGL的还是写入,即使深度缓冲alpha值为0,我该如何避免这种情况?

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

+0

我不知道回答你的问题,但它似乎是错误的一般的解决方案... –

+0

是否有可能将所有精灵打包成只有一个纹理? – elenfoiro78

回答

2

您可以使用alpha测试。

glEnable(GL_ALPHA_TEST); 
glAlphaFunc(GL_GREATER, threshold); 

如果输入像素的alpha值大于阈值,那么只绘制像素。

这是不赞成使用新的OpenGL版本,但可以很容易地通过添加这样的事情您的片段着色器mimiced:

if (col.a <= threshold) 
    discard;