Two.js — это легковесная библиотека для работы с двумерной графикой в JavaScript, предоставляющая высокоуровневый API для создания и анимации векторных объектов. Основная цель архитектуры библиотеки — абстрагировать низкоуровневую работу с DOM, Canvas и SVG, предоставляя единый интерфейс для создания графики.
1. Двигатель рендеринга (Renderer) Two.js использует концепцию рендерера, который инкапсулирует логику отрисовки объектов на выбранной платформе. Существует три типа рендереров:
<canvas>. Подходит для динамичных сцен с большим
количеством объектов.Рендерер хранит ссылки на все объекты сцены и управляет циклом отрисовки.
2. Сцена (Scene) Сцена в Two.js представляет собой контейнер для всех графических элементов. Она управляет иерархией объектов, обеспечивает правильное позиционирование и трансформации. Каждый объект сцены может иметь родителя и потомков, что позволяет строить сложные композиции.
3. Объекты (Elements) Основные строительные блоки Two.js:
Rectangle, Circle, Ellipse,
Polygon, Line.Каждый объект обладает набором свойств состояния,
включая position, rotation,
scale, stroke, fill и
opacity. Изменения этих свойств автоматически отражаются
при следующем вызове рендера.
4. Материалы и стили (Styles) Two.js не использует концепцию материалов как в 3D-библиотеках, но предоставляет мощный механизм управления стилями объектов. Можно устанавливать свойства:
fill — цвет заливкиstroke — цвет контураlinewidth — толщина линииopacity — прозрачностьСтили могут наследоваться от группы объектов, что облегчает управление внешним видом сложных композиций.
Two.js применяет двухуровневую архитектуру обновления:
Обновление состояния объектов При изменении свойств объектов Two.js обновляет внутренние матрицы трансформаций. Это позволяет избежать непосредственного пересчёта координат при каждой операции с объектом.
Отрисовка Рендерер перебирает все элементы сцены и визуализирует их на выбранной платформе (Canvas, SVG или WebGL). Two.js оптимизирует процесс, выполняя минимальные перерисовки, что повышает производительность.
Для анимации Two.js использует встроенный таймер, который вызывает
метод update() сцены на каждом кадре. Это позволяет плавно
изменять свойства объектов через ключевые кадры или вручную обновляя
значения свойств.
Каждый объект имеет собственную матрицу трансформаций, которая включает в себя:
translation)rotation)scale)При добавлении объекта в группу его трансформации комбинируются с трансформациями родителя. Это упрощает создание сложных иерархий объектов, например, анимацию персонажей или интерактивных схем.
Two.js поддерживает базовую систему событий через подписку на изменение свойств объектов. Возможности включают:
change — триггер при любом изменении свойства
объектаinsert / remove — уведомление о добавлении
или удалении объекта из сценыСобытия позволяют реализовывать интерактивность без прямого вмешательства в рендерер, что снижает связность кода и повышает модульность.
Two.js проектируется с учетом расширяемости:
Two.Element.Two.bind позволяет расширять функционал без модификации
ядра.Two.js применяет следующие подходы для повышения эффективности:
Эта архитектура делает Two.js подходящей для сложных интерактивных приложений с большим количеством динамических элементов, сохраняя простоту кода и удобство работы с графикой.