Transparency 透明黑

Transparency 透明黑,transparency,shader,webgl,Transparency,Shader,Webgl,我有一个奇怪的问题,当我尝试在WebGL中进行混合时,我无法解决。黑色被渲染为完全透明,所有带有灰色阴影的物体也被渲染为半透明。我已经将其设置为使用alpha通道作为透明度的源,并且在某些方面它是有效的,当更改alpha值时,所有非黑色/灰色的东西都会以不同的方式渲染。但即使我将alpha设置为1,黑色仍然显示为透明 这就是我实现透明度的方式: this.gl.blendFunc(this.gl.SRC_ALPHA, this.gl.ONE); this.gl.enable(this.gl.BL

我有一个奇怪的问题,当我尝试在WebGL中进行混合时,我无法解决。黑色被渲染为完全透明,所有带有灰色阴影的物体也被渲染为半透明。我已经将其设置为使用alpha通道作为透明度的源,并且在某些方面它是有效的,当更改alpha值时,所有非黑色/灰色的东西都会以不同的方式渲染。但即使我将alpha设置为1,黑色仍然显示为透明

这就是我实现透明度的方式:

this.gl.blendFunc(this.gl.SRC_ALPHA, this.gl.ONE);
this.gl.enable(this.gl.BLEND);
this.gl.disable(this.gl.DEPTH_TEST);
   gl_FragColor = vec4(texColor.rgb * vLightWeight, texColor.a * uAlpha);
以及着色器中执行透明度的部分:

this.gl.blendFunc(this.gl.SRC_ALPHA, this.gl.ONE);
this.gl.enable(this.gl.BLEND);
this.gl.disable(this.gl.DEPTH_TEST);
   gl_FragColor = vec4(texColor.rgb * vLightWeight, texColor.a * uAlpha);

其中texColor是正在采样的纹理颜色,vLightWeight是在顶点着色器中计算的阴影,而uAlpha是我用于透明度的均匀性。

我认为您应该有gl.ONE减去,而您当前有gl.ONE

gl.blendFunc( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA ); gl.blendFunc(gl.SRC_ALPHA,gl.ONE_减去_SRC_ALPHA);