Webgl 为图像添加背景
Webgl adding a background to an image
所以我是 Webgl 的新手,一直在尝试添加透明背景,这样您仍然可以看到图像和背景。我已经包含了我一直在使用的代码,但每次我 运行 代码它只是发布图像而不改变背景。任何关于我做错了什么的提示都将不胜感激。
precision highp float;
// Uniform variables are constant over image
uniform float time;
uniform sampler2D image;
uniform vec2 u_resolution;
uniform vec2 viewport;
void main(void)
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 0.5);
gl_FragColor = texture2D(image, gl_FragCoord.yx / 600.0);
}
这取决于你想要什么。您可以 mix
纹理颜色和背景颜色 1:1:
void main(void)
{
vec4 color = vec4(1.0, 0.0, 0.0, 0.5);
vec4 textureColor = texture2D(image, gl_FragCoord.yx / 600.0);
gl_FragColor = mix(textureColor, color, 0.5);
}
如果纹理是部分透明的并且您想用背景色填充这些区域,则必须mix
颜色取决于纹理的 Alpha 通道 (textureColor.a
):
void main(void)
{
vec4 backColor = vec4(1.0, 0.0, 0.0, 0.5);
vec4 textureColor = texture2D(image, gl_FragCoord.yx / 600.0);
gl_FragColor = mix(backColor, textureColor, textureColor.a);
}
然而,Blending是完全不同的东西。需要启用混合并且必须设置混合功能。这不能在共享器中完成。它必须使用 WebGL 指令进行设置。例如:
gl.enable(gl.BLEND);
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
另见
所以我是 Webgl 的新手,一直在尝试添加透明背景,这样您仍然可以看到图像和背景。我已经包含了我一直在使用的代码,但每次我 运行 代码它只是发布图像而不改变背景。任何关于我做错了什么的提示都将不胜感激。
precision highp float;
// Uniform variables are constant over image
uniform float time;
uniform sampler2D image;
uniform vec2 u_resolution;
uniform vec2 viewport;
void main(void)
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 0.5);
gl_FragColor = texture2D(image, gl_FragCoord.yx / 600.0);
}
这取决于你想要什么。您可以 mix
纹理颜色和背景颜色 1:1:
void main(void)
{
vec4 color = vec4(1.0, 0.0, 0.0, 0.5);
vec4 textureColor = texture2D(image, gl_FragCoord.yx / 600.0);
gl_FragColor = mix(textureColor, color, 0.5);
}
如果纹理是部分透明的并且您想用背景色填充这些区域,则必须mix
颜色取决于纹理的 Alpha 通道 (textureColor.a
):
void main(void)
{
vec4 backColor = vec4(1.0, 0.0, 0.0, 0.5);
vec4 textureColor = texture2D(image, gl_FragCoord.yx / 600.0);
gl_FragColor = mix(backColor, textureColor, textureColor.a);
}
然而,Blending是完全不同的东西。需要启用混合并且必须设置混合功能。这不能在共享器中完成。它必须使用 WebGL 指令进行设置。例如:
gl.enable(gl.BLEND);
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
另见