2013-08-26 173 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

也在画布上呈现背景图像。只是简单的,整个空间填充四。如果问题解决了,请接受答案,另一个问题是另一个问题。 –