我有一个奇怪的问题,在尝试在 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);
其中 texColor 是正在采样的纹理颜色,vLightWeight 是在顶点着色器中计算的阴影,而 uAlpha 是我用于透明度的制服。