我想写一个简单的着色器,其中一半的场景将显示,一半的场景将透明。我似乎无法找出为什么透明度不工作: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