2014-01-12 102 views
1

我設置glBlendFunc到OpenGL ES 2.0的混合

glEnable(GL_BLEND); 
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 

,並用於測試目的我設置的顏色在我的片段着色器這樣的

gl_FragColor = vec4(1.0,0.0,0.0,0.0); 

不宜對象是完全透明的?如果不是,原因是什麼?

回答

2

glBlendFunc()的第一個參數是來源因子,第二個參數是目標因子。你的情況:

sfactor = 1.0; 
dfactor = 1.0 - src.alpha; 

src.alpha = 0.0,從gl_FragColor

sfactor = 1.0; 
dfactor = 1.0; 

所以把到緩衝區的顏色將是:

buffer = sfactor * src + dfactor * dst; 

代...

buffer = (1.0,0.0,0.0,0.0) + dst; 

所以,把它簡單化,就是將1添加到現有緩衝區的紅色通道中。

如果你想使輸出完全透明的,通常的功能是:

glBlendFunc(GL_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

你寫的一個通常用於在源預乘阿爾法。但是(1,0,0,0)顯然不是預乘alpha值!

+0

非常有幫助的解釋,謝謝! – cboe