搜索了一下,我从 Mozilla Development Network 找到了这个例子
function draw() {
var ctx = document.getElementById('canvas').getContext('2d');
var radgrad = ctx.createRadialGradient(0,0,1,0,0,150);
radgrad.addColorStop(0, '#A7D30C');
radgrad.addColorStop(1, 'rgba(1,159,98,0)');
var radgrad2 = ctx.createRadialGradient(0,150,1,0,150,150);
radgrad2.addColorStop(0, '#FF5F98');
radgrad2.addColorStop(1, 'rgba(255,1,136,0)');
var radgrad3 = ctx.createRadialGradient(150,0,1,150,0,150);
radgrad3.addColorStop(0, '#00C9FF');
radgrad3.addColorStop(1, 'rgba(0,201,255,0)');
var radgrad4 = ctx.createRadialGradient(150,150,1,150,150,150);
radgrad4.addColorStop(0, '#F4F201');
radgrad4.addColorStop(1, 'rgba(228,199,0,0)');
ctx.fillStyle = radgrad4;
ctx.fillRect(0,0,150,150);
ctx.fillStyle = radgrad3;
ctx.fillRect(0,0,150,150);
ctx.fillStyle = radgrad2;
ctx.fillRect(0,0,150,150);
ctx.fillStyle = radgrad;
ctx.fillRect(0,0,150,150);
}
基于此,您可以将每个单元格绘制为径向渐变,并使用完全透明的颜色作为其最后一步,以便与其他单元格更好地融合。
如果没有它,我认为您将需要根据它们与每个单元格的距离来计算每个像素颜色。
通常,如果在制作 voronoi 纹理时,将表面划分为网格,然后为每个顶点指定颜色,然后将像素的颜色与与构成其单元格的顶点的距离进行插值。
另请参阅http://www.raymondhill.net/voronoi/rhill-voronoi.html,了解在 html5 中实现真正的 voronoi。它是开源的,并根据 MIT 许可证获得许可,因此您可以使用它。