SVGRenderer — это один из встроенных рендереров библиотеки Two.js, который позволяет создавать векторную графику в формате SVG. В отличие от WebGLRenderer или CanvasRenderer, SVGRenderer ориентирован на сохранение векторного качества объектов, что делает его идеальным для масштабируемых интерфейсов и печатной графики.
Создание экземпляра SVGRenderer выполняется через конструктор Two.js:
const elem = document.getElementById('drawing');
const two = new Two({
width: 800,
height: 600,
type: Two.Types.svg
}).appendTo(elem);
Здесь важно отметить, что свойство type принимает
значение Two.Types.svg, что автоматически активирует
SVG-рендеринг. Результатом будет DOM-элемент <svg>,
встроенный в указанное родительское окно.
SVGRenderer сохраняет графику в виде чистых векторных элементов.
Каждая фигура (прямоугольник, круг, линия, полигон) представлена
соответствующим тегом SVG (<rect>,
<circle>, <line>,
<polygon>). Это обеспечивает:
SVGRenderer напрямую интегрируется с DOM, что позволяет использовать стандартные CSS-стили и взаимодействие с JavaScript через события. Например:
circle._renderer.elem.addEventListener('click', () => {
circle.fill = 'red';
two.update();
});
Элемент circle._renderer.elem указывает на
соответствующий <circle> внутри SVG, предоставляя
полный контроль над его поведением.
SVGRenderer поддерживает группы (Two.Group), которые
при рендеринге конвертируются в <g> элементы. Это
позволяет применять трансформации ко всем дочерним объектам
одновременно:
const group = two.makeGroup(circle, rectangle);
group.translation.set(100, 50);
two.update();
При этом <g> получает атрибут
transform, объединяющий все смещения и повороты группы,
сохраняя структуру вектора.
SVGRenderer ограничен по производительности при большом количестве объектов. Каждый элемент создается как отдельный DOM-узел, поэтому сотни и тысячи объектов могут значительно замедлять браузер. Для динамических анимаций с высоким числом объектов предпочтительнее CanvasRenderer или WebGLRenderer.
Не все графические эффекты Two.js полностью поддерживаются в SVG:
<filter>, что не всегда совместимо с анимацией;Анимации в SVGRenderer происходят путем обновления атрибутов DOM-элементов. Это приводит к следующему:
two.update() после
каждого изменения;SVGRenderer использует абсолютные координаты для всех элементов.
Применение масштабирования через CSS или свойства viewBox
может изменять визуальное отображение, но не координаты объектов внутри
Two.js. Это важно учитывать при позиционировании элементов и
анимациях.
Основные методы Two.js работают одинаково для всех рендереров, но для SVGRenderer полезны дополнительные возможности:
_renderer.elem — доступ к корневому
<svg> элементу;_renderer.domElement — устаревший, но иногда
используется для манипуляций с DOM;._renderer.elem.setAttribute() — прямое изменение
атрибутов SVG;._renderer.elem.appendChild() — добавление
пользовательских элементов внутри SVG.Эти инструменты позволяют гибко управлять внешним видом и структурой SVG, создавая сложные композиции и интегрируя их с остальной веб-страницей.