css - 如何在 Canvas 上的webGL中绘制透明背景

标签 css webgl shader

https://codepen.io/anon/pen/zMRjwv

在该页面中,我想绘制一个透明背景,但是当我使用 gl.clearColor(0, 0, 0, 0) 时它不起作用。

 const gl = canvas.getContext('webgl', {alpha: false});

设置 alpha:false 也是不能的,因为 2D context 属性: alpha:指示 Canvas 是否包含 alpha channel 的 bool 值。

如果设置为 false,浏览器将知道背景总是不透明的,这可以加快透明内容和 images.WebGL 上下文的绘制。

attributes:
alpha: Boolean that indicates if the canvas contains an alpha buffer.

最佳答案

您链接到的示例的问题是示例本身不透明。它绘制背景,然后绘制樱花花瓣,然后应用辉光着色器使花瓣发光。这会生成一个不透明的图像,因此将 Canvas alpha 设置为 true(或不全部设置)不会有什么不同。

要使其透明,请注释掉以下行并更改背景颜色

// gl.bindFramebuffer(gl.FRAMEBUFFER, renderSpec.mainRT.frameBuffer);
// gl.viewport(0, 0, renderSpec.mainRT.width, renderSpec.mainRT.height);
gl.clearColor(0, 0, 0, 0);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);

// renderBackground();
renderPointFlowers();
// renderPostProcess();

然后您可以通过改变这条线来调整花瓣的亮度

col *= mix(0.8, 1.0, pow(abs(coord.x), 0.3));

以这个为例

col *= mix(1.8, 3.0, pow(abs(coord.x), 0.3));

关于css - 如何在 Canvas 上的webGL中绘制透明背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53422916/

相关文章:

html - 试图用 CSS 填充 SVG,但不起作用

javascript - WebGL 中 Uncaught Error : SECURITY_ERR: DOM Exception 18 When applying textures with Three. js

android - Open GL ES 3.1 计算着色器的最小工作示例

opengl - 切线空间法线贴图-着色器完整性检查

opengl-es - 如何在 webgl 渲染 channel 之间传递高精度 uv 坐标?

directx - 使用 GPU 着色器 HLSL 将 YUV422 转换为 RGB

html - 我可以在内部 CSS 中使用媒体查询吗,它会避免加载我定义的背景图像吗?

css - 应用程序 UI 中移动设备的联系人列表

JAvascript 180 到 -180 旋转

javascript - Three.js 发光着色器正面不在 chrome 中呈现,在其他浏览器中工作