本文主旨是探究使用framebuffer特性,对blend功能有何影响。
WebGL Blend
回顾前文,可以通过gl.blend开启WebGL混合功能。
本文再通过绘制一个半透明的蓝色矩形,进一步开启gl.blend之后,浏览器是如何一步步合成最终内容的。
gl.enable(gl.BLEND);
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
const vertexData = [-1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 1.0];
setAttribute(program, gl, vertexData, "a_position");
const v_color = gl.getUniformLocation(program, 'v_color');
gl.uniform4f(v_color, 0,0,1,0.5);
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);

可以发现,最终显示的颜色值是(0,0,31)。整个混合过程,涉及三个图层(自下而上):浏览器页面(黑色)、canvas(黑色)、矩形(具有透明度的蓝色)。

混合过程的顺
WebGL Framebuffer与Blend功能的影响分析

本文探讨了WebGL中使用framebuffer和blend功能对绘制效果的影响。通过示例展示了开启blend后,如何进行多层混合计算,以及framebuffer如何作为额外图层参与混合,导致颜色变化。为避免framebuffer带来的额外混合计算导致内容失真,建议在将framebuffer内容绘制到canvas时关闭blend功能。
最低0.47元/天 解锁文章
1405

被折叠的 条评论
为什么被折叠?



