2015-12-19 96 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;