Snap.svg предоставляет средства для работы с SVG-графикой, включая
возможность моделирования освещения с использованием фильтров и
градиентов. Основным элементом работы является объект Snap,
создающий контейнер для SVG-элементов:
var s = Snap(800, 600);
Это создаёт область 800×600 пикселей. Все графические элементы, которые будут взаимодействовать с освещением, добавляются внутрь этого контейнера.
SVG поддерживает фильтры, которые позволяют создавать реалистичные световые эффекты. Snap.svg предоставляет удобный интерфейс для их применения.
Пример создания фильтра света:
var blurFilter = s.filter(Snap.filter.blur(5, 5));
var circle = s.circle(200, 200, 100);
circle.attr({
fill: "#ff6600",
filter: blurFilter
});
Фильтр размытия имитирует рассеянное освещение, создавая мягкий эффект свечения вокруг объекта.
Тени создаются через комбинацию смещения и размытия:
var shadow = s.filter(Snap.filter.shadow(5, 5, 5, "#000", 0.5));
circle.attr({ filter: shadow });
Тени помогают визуально подчеркнуть объём объектов и направление источника света.
Градиенты — основной инструмент для имитации источников света на плоских объектах.
var linearGrad = s.gradient("l(0, 0, 1, 1)#fff-#000");
var rect = s.rect(50, 50, 200, 100).attr({ fill: linearGrad });
l указывает линейный градиент.(0,0,1,1) задают направление.#fff-#000 — переход от белого к чёрному.Линейный градиент используется для создания эффекта падения света по поверхности, например имитации дневного освещения.
var radialGrad = s.gradient("r(0.5, 0.5, 0.5)#fff-#000");
var circle2 = s.circle(400, 300, 80).attr({ fill: radialGrad });
r — радиальный градиент.(0.5, 0.5, 0.5) задают центр и радиус
градиента.Радиальные градиенты идеально подходят для имитации освещения от лампы или свечения объектов.
Для реалистичного освещения часто используют комбинирование фильтров и градиентов:
var glow = s.filter(Snap.filter.blur(8, 8));
var star = s.polygon([100,10, 120,60, 80,60]).attr({
fill: s.gradient("r(0.5,0.5,0.5)#ff0-#f00"),
filter: glow
});
Это позволяет создавать эффект свечения и объёма без сложной 3D-графики.
Прозрачность (opacity) и смешение цветов
(fill-opacity) играют важную роль в восприятии
освещения.
var lightCircle = s.circle(300, 150, 60).attr({
fill: "#fff",
opacity: 0.3
});
Snap.svg позволяет анимировать освещение, используя функции
.animate():
circle.attr({ fill: "#ff0000" }).animate({ fill: "#ffff00" }, 2000, mina.linear);
Все элементы можно объединять в сложные сцены с несколькими источниками света:
var s = Snap(800, 600);
var radial = s.gradient("r(0.5,0.5,0.5)#fff-#00f");
var circle = s.circle(400, 300, 100).attr({ fill: radial, filter: s.filter(Snap.filter.blur(10, 10)) });
var shadow = s.rect(350, 400, 100, 20).attr({ fill: "#000", opacity: 0.5, filter: s.filter(Snap.filter.blur(5,5)) });
Так можно создавать сложные визуальные эффекты освещения, сочетающие свечения, тени и цветовые градиенты, делая сцену более выразительной и реалистичной.