【发布时间】:2016-02-18 15:24:46
【问题描述】:
所以目前我正在做一个小项目,该项目使用高度:宽度比为 1:2 的菱形渲染等距平铺空间。
我计划在它们上方制作一个“盾牌”效果,基本上将越来越多的蓝色放置在靠近边缘的位置,而内圈是透明的,以产生半透明球体在其上方的错觉。
为此,我使用径向渐变。
目前我的画布在渲染时如下所示:
我的代码如下所示:
var gradient = ctx.createRadialGradient(450, tileheight * 5 / 2, 100, 450, tileheight * 5 / 2, 200);
gradient.addColorStop(0, "rgba(0, 0, 55, 0.5)");
gradient.addColorStop(1, "rgba(10, 10, 55, 0.8)");
drawdiamond(gradient, 450, 0, tilewidth * 5, tileheight * 5);
其中 drawdiamond 是一个绘制图块的函数,该函数将绘制一个与地图大小相同的菱形,其渐变由变量“gradient”指定。
而tilewidth和tileheight是每个tile最长部分的宽度和高度,分别是100和50。
如果您查看图像,则会出现问题,因为我正在绘制比它们更高的瓷砖更宽,我需要绘制一个高度为宽度半径一半的椭圆,以便效果令人信服。
有 ctx.setPattern 我可以在其中制作具有我想要的渐变的图像,但如果我想在运行时使地图更大,我需要为每种尺寸创建多个图像,这并不理想。
有没有办法转换图像渐变以绘制椭圆而不是圆形?
(对不起,如果这已经发布了)。
【问题讨论】:
-
这是一个我以前从未想过的好问题。 This article 建议您必须更改变换比例才能实现它
-
您是否尝试过使用
gradientUnits和gradientTransform属性来挤压辐射? -
@neuhaus 这个问题是关于 canvas2d,而不是 svg
标签: javascript canvas gradient