Two.js предоставляет три основных способа рендеринга графики: SVG, Canvas и WebGL. Каждый из них имеет свои особенности, преимущества и ограничения, что позволяет выбирать оптимальный рендерер в зависимости от задачи и требований к производительности.
SVG (Scalable Vector Graphics) — это векторный
формат, поддерживаемый всеми современными браузерами. Рендерер SVG в
Two.js создаёт элементы в DOM в виде <svg> и
<path>, что обеспечивает:
Недостатки:
Пример инициализации рендерера SVG:
const two = new Two({
width: 800,
height: 600,
type: Two.Types.svg
}).appendTo(document.body);
const circle = two.makeCircle(400, 300, 50);
circle.fill = '#FF8000';
circle.stroke = '#000';
circle.linewidth = 5;
two.update();
В этом примере создаётся круг с заливкой и обводкой, который
рендерится как SVG-элемент. Любые последующие изменения свойств
автоматически отражаются при вызове two.update().
Canvas использует HTML5 <canvas>
для растрового рендеринга. Все объекты Two.js отрисовываются на одном
холсте с помощью 2D API.
Преимущества:
Недостатки:
Пример инициализации Canvas:
const two = new Two({
width: 800,
height: 600,
type: Two.Types.canvas
}).appendTo(document.body);
const rect = two.makeRectangle(400, 300, 200, 100);
rect.fill = '#0080FF';
rect.stroke = '#000';
rect.linewidth = 4;
two.update();
Canvas рендерер хорошо подходит для анимаций с большим числом объектов, интерактивных визуализаций и игр.
WebGL рендерер использует аппаратное ускорение графического процессора и предоставляет доступ к 3D-рендерингу и сложным визуальным эффектам.
Особенности WebGL в Two.js:
Ограничения:
Пример инициализации WebGL:
const two = new Two({
width: 800,
height: 600,
type: Two.Types.webgl
}).appendTo(document.body);
const ellipse = two.makeEllipse(400, 300, 150, 80);
ellipse.fill = '#00FF80';
ellipse.stroke = '#000';
ellipse.linewidth = 6;
two.update();
WebGL идеально подходит для динамических сцен с тысячами объектов, анимаций с плавными трансформациями и эффектами освещения.
Two.js позволяет переключаться между рендерерами без изменения основной структуры кода, что делает его гибким инструментом для любых 2D графических задач.
| Характеристика | SVG | Canvas | WebGL |
|---|---|---|---|
| Тип рендеринга | Векторный | Растровый | Аппаратно-ускоренный |
| Масштабируемость | Отличная | Плохая | Отличная |
| Доступ к элементам | Через DOM | Через координаты | Через сцену/свою логику |
| Производительность | Средняя | Высокая | Очень высокая |
| Подходит для | Статика, UI, иконки | Анимации, игры | Большие сцены, эффекты |
Использование разных рендереров в Two.js позволяет оптимально сочетать качество, производительность и возможности взаимодействия в зависимости от конкретной задачи.