2010-09-25 161 views
2

最好的方法是什麼?Alpha與OpenGL ES 2.0混合?

我試圖用一個片段着色器看起來像這樣幼稚地做到這一點:

varying lowp vec4 color; 
void main() 
{ 
    lowp vec4 alpha = colorVarying.wwww; 
    const lowp vec4 one = vec4(1.0, 1.0, 1.0, 1.0); 
    lowp vec4 oneMinusAlpha = one-alpha; 
    gl_FragColor = gl_FragColor*oneMinusAlpha + colorVarying*alpha; 
    gl_FragColor.w = 1.0; 
} 

但這不起作用,因爲它似乎gl_FragColor不包含任何着色器運行之前有意義。

什麼是正確的方法?

回答

7

Alpha混合是爲你完成的。在着色器出口處,gl_FragColor應該在w組件中保存alpha值,並且您必須使用常規API設置混合模式,就像完全沒有着色器一樣。例如gl_FragColor = vec4(0,1,0,0.5)將產生綠色的50%透明片段。

+1

Gah。談論沒有看到樹木的森林。謝謝。 – 2010-09-25 13:12:13