Saya memiliki lapisan yang merender LineStrings dan saya mencoba menerapkan efek cahaya pada garis. Style yang saya buat menggunakan penyaji khusus untuk membuat goresan dengan gradien tegak lurus pada setiap segmen garis:
const glow_style = new Style({
renderer: (_coords, state) => {
const ctx = state.context;
const coords = _coords as Coordinate[];
ctx.lineWidth = 25;
for (let i = 1; i < coords.length; i++) {
const start = coords[i - 1];
const end = coords[i];
const [grd_start, grd_end] = getPerpendicularPoints(start, end, ctx.lineWidth);
const grd = ctx.createLinearGradient(grd_start[0], grd_start[1], grd_end[0], grd_end[1]);
grd.addColorStop(0, '#ffffff00');
grd.addColorStop(0.5, 'white');
grd.addColorStop(1, '#ffffff00');
ctx.strokeStyle = grd;
ctx.beginPath();
ctx.moveTo(start[0], start[1]);
ctx.lineTo(end[0], end[1]);
ctx.stroke();
}
}
});
Gaya ini berfungsi untuk garis lurus sepenuhnya, namun rusak di sudut, karena gradien tidak terhubung dengan baik antar segmen garis. Jika ctx.lineCap
dibiarkan sebagai butt
, gradiennya tidak bersebelahan di sekitar sudut. Jika disetel ke round
, segmen akan bersentuhan, namun gradien menjadi terputus-putus karena tumpang tindih. Berikut adalah contoh masing-masing:
Opsi apa yang saya miliki untuk membuat gradien halus di sepanjang LineString?