2013-08-26 60 views
2

好吧,首先,我在GLSL shader非常新,而且我想WebGL的片段着色器透明度

#ifdef GL_ES 
    //precision mediump float; 
    precision highp float; 
    #endif 

    uniform vec2 uTimes; 

    varying vec2 texCoord; 
    varying vec2 screenCoord; 

    void main(void) { 
     vec3 col; 
     float c; 
     vec2 tmpv = texCoord * vec2(0.8, 1.0) - vec2(0.95, 1.0); 
     c = exp(-pow(length(tmpv) * 1.8, 2.0)); 
     col = mix(vec3(0.02, 0.0, 0.03), vec3(0.96, 0.98, 1.0) * 1.5, c); 
     gl_FragColor = vec4(col * 0.5, 0); 
    } 

到目前爲止環繞以下着色器我的頭,我知道它給了我一個徑向漸變(可能)。我真正想知道的是如何使它完全透明。我在想,我需要一個vec4,對吧?

回答

4

您需要打開混合。

http://www.senchalabs.org/philogl/PhiloGL/examples/lessons/8/http://learningwebgl.com/blog/?p=859

沒有混合,顏色的深淺和緩衝區將不照顧什麼是以前在緩衝區,它只是簡單地覆蓋數據進行更新。通過混合,並根據您使用的混合函數類型,緩衝區將使用將預先渲染的數據轉化爲計數的數據進行更新。

這是對你有意思的部分:

gl.blendFunc(gl.SRC_ALPHA, gl.ONE); 
gl.enable(gl.BLEND); 
gl.disable(gl.DEPTH_TEST); 

希望這有助於。

+0

嗯,它的工作。有些。該着色器代表背景。我可以讓它透明,但是我撞到了另一面牆。即使使用Blend或vec4(0,0,0,0),我也無法使畫布背景透明。我身上有背景圖像,但畫布全是黑色的。 –

+0

整個沙包可以在這裏看到:http://188.27.113.181/5cms/ –

+0

也在畫布上呈現背景圖像。只是簡單的,整個空間填充四。如果問題解決了,請接受答案,另一個問題是另一個問題。 –