2013-03-08 61 views
4

我想写一个简单的着色器,其中一半的场景将显示,一半的场景将透明。我似乎无法找出为什么透明度不工作:Threejs着色器 - 带Alpha的gl_FragColor(不透明度不变)

uniform sampler2D tDiffuse; 
    varying vec2 vUv; 

    void main(){ 
     vec2 p = vUv; 
     vec4 color;  

     if(p.x < 0.5){ 
       color = (1.0, 0.0, 0.0, 0.0); 
     }else{ 
       color = texture2D(tDiffuse, p); 
     } 

     gl_FragColor = color; 
    } 

着色器是没有错误肯定运行 - 在屏幕的右半部分是我threejs场景和画面的左半部分是红色的(当它真的应该是透明的)。我读过,也许我需要调用glBlendFunc(GL_SRC_ALPHA); - 但是当我尝试这个时,我遇到了错误。为此,我做了renderer.context.blendFuncSeparate(GL_SRC_ALPHA);在我的主要js文件(不是着色器)中。我应该把这个放在别的地方吗?

任何帮助,将不胜感激。作为参考,我正在将我的着色器与标准effectsComposer,shaderPass等一起使用 - 这是大多数三维着色器示例所使用的。

在此先感谢您的帮助!

回答

5

很难只用部分信息和代码片段来帮助你,所以我只能做出有根据的猜测。

默认情况下EffectComposer使用格式为RGB的渲染目标。确定了RGBA

您是否指定了material.transparent = true?

three.js所r.56

+0

WestLangley - 抱歉,没有提供完整的代码 - 这里是(http://108.171.176.74/~rtilton1/stackOverflow/)。也感谢澄清EffectComposer默认为RGB格式而不是RGBA。我想我不知道在哪里使用特效制作器访问素材,因为我无法做'composer.transparent = true;' – Robbie 2013-03-08 14:22:44

+2

在你的情况下,它会是'window.effect.material.transparent = true;'。 – WestLangley 2013-03-08 15:05:18