我正在尝试编写一个简单的着色器,其中一半的场景将被显示,另一半将是透明的。但是我似乎无法弄清楚为什么透明度没有起作用:
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)——但是当我尝试这样做时,会出现错误。为了做到这一点,我在我的主要js文件(而不是着色器)中执行了renderer.context.blendFuncSeparate(GL_SRC_ALPHA)。我应该把它放在别的地方才能让它正常工作吗?
非常感谢您的帮助!为了参考,我正在使用标准的effectsComposer、shaderPass等来应用我的着色器——这是大多数threejs着色器示例所使用的。
window.effect.material.transparent = true;
。 - WestLangley