2011-09-01 59 views
4

是否可以實現透明度效果,其中alpha小於0.5的片段被丟棄,而alpha大於0.5的片段則呈現不透明?從我讀過,WebGL中的AlphaFunctions?

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

將是什麼我要找的,但不幸的是,AlphaFunction不WebGL的定義。有沒有解決方法?

我的問題是,透明的片段寫入深度緩衝區,從而避免進一步碎片beeing呈現: alpha_error http://gebackene-ente.at/nudelsalat/sonstiges/pointcloud_alphaerror.jpg

排序是不是一種選擇,因爲有太多的分。

回答

12

使用着色器來做到這一點。在設置輸出顏色後,在片段着色器的底部:

if(gl_FragColor.a < 0.5) 
    discard; 
+0

這太好了,謝謝!再次! – Markus

+1

注意,您必須在設置輸出顏色後將「丟棄」放在底部,正如Nicol Bolas所說。在某些情況下,放棄「放棄」似乎被忽略。 –

4

您可以使用discard語句完全丟棄片段着色器中的片段。所以只要看看那裏的α從紋理(或其他地方),然後就打電話

if(alpha < 0.5) 
    discard; 

所以,你甚至都不需要阿爾法傳播到顏色,也可以讓測試依賴於別的東西。這是進行alpha測試的現代方式,因爲它在桌面GL 3 +中也被棄用。