You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebGL给图片添加透明背景功能运行无效果求助

问题原因

  • 片元着色器的输出被重复赋值覆盖:你先给gl_FragColor赋值了半透红色,紧接着的纹理采样操作直接把这个值完全覆盖了,如果你的原图没有透明通道,输出的alpha值默认为1,自然看不到下层背景。
  • 未开启WebGL的混合功能:WebGL默认不会自动叠加片元和画布已有内容的颜色,必须手动配置混合规则才能让alpha值生效。
  • 采样坐标存在适配问题:你用gl_FragCoord.yx会导致图片横竖翻转,硬编码600作为采样分母,当画布尺寸不是600*600时会出现纹理拉伸变形。

修正方案

1. 修改片元着色器代码

precision highp float;
    
uniform float time;
uniform sampler2D image;
uniform vec2 u_resolution;
uniform vec2 viewport;
    
void main(void)
{
    // 采样纹理,用u_resolution动态计算坐标适配不同画布尺寸
    vec4 textureColor = texture2D(image, gl_FragCoord.xy / u_resolution);
    // 调整alpha值实现半透效果,可自行调整0.5这个数值控制透明度
    gl_FragColor = vec4(textureColor.rgb, 0.5);
}

2. 补充JS端的混合配置

在WebGL上下文初始化完成后,添加以下代码开启混合:

const gl = canvas.getContext('webgl');
// 开启alpha混合
gl.enable(gl.BLEND);
// 配置标准透明混合规则:源颜色乘自身alpha,背景乘1减源alpha再相加
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);

内容的提问来源于stack exchange,提问作者JByrd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:06:04