我想寫一個簡單的着色器,其中一半的場景將顯示,一半的場景將透明。我似乎無法找出爲什麼透明度不工作: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等一起使用 - 這是大多數三維着色器示例所使用的。
在此先感謝您的幫助!
WestLangley - 抱歉,沒有提供完整的代碼 - 這裏是(http://108.171.176.74/~rtilton1/stackOverflow/)。也感謝澄清EffectComposer默認爲RGB格式而不是RGBA。我想我不知道在哪裏使用特效製作器訪問素材,因爲我無法做'composer.transparent = true;' – Robbie 2013-03-08 14:22:44
在你的情況下,它會是'window.effect.material.transparent = true;'。 – WestLangley 2013-03-08 15:05:18