【问题标题】:WebGL fragment shader opacityWebGL 片段着色器不透明度
【发布时间】:2013-08-26 18:32:45
【问题描述】:

好的,首先,我在 GLSL 着色器方面还是个新手,我正在尝试围绕以下着色器展开思考

#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,对吧?

【问题讨论】:

    标签: javascript webgl glsl shader


    【解决方案1】:

    您需要打开混合。

    请参阅 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);
    

    希望这会有所帮助。

    【讨论】:

    • 嗯,它奏效了。有些。该着色器代表背景。我可以让它透明,但是我碰到了另一面墙。即使使用 Blend 或 vec4(0,0,0,0),我也无法使画布的背景透明。我的身体上有一个背景图像,但画布全是黑色的。
    • 在画布上渲染背景图像。只是简单的,整个空间填充四边形。如果从问题中解决了您的问题,请接受答案,另一个问题是另一个问题。
    • 好主意,我会试试的。
    • 有什么理由可以解决我在 Chrome 中的 Alpha 问题,但现在在 Firefox 中什么都看不到,而在我添加它之前,它在 Firefox 中有效,但在 chrome 中无效? ://
    • 原来 Fire 只是更积极地混合它 - 所以 Chrome 中 0.3 的 alpha 等于 Firefox 中的 0.8..
    猜你喜欢
    • 1970-01-01
    • 2014-02-06
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    相关资源
    最近更新 更多