2013-03-08 92 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