Two.js — это мощная библиотека для работы с 2D-графикой на языке
JavaScript, ориентированная на анимацию и генеративную графику. Основной
объект библиотеки — Two, который управляет сценой,
рендерером и основными настройками холста. Создание экземпляра выглядит
следующим образом:
const two = new Two({
width: 800,
height: 600,
type: Two.Types.canvas // поддержка 'webgl' и 'svg'
}).appendTo(document.body);
Ключевые параметры:
width и height — размеры холста.type — выбор рендерера: canvas,
svg, webgl.appendTo добавляет холст в DOM.После инициализации можно создавать фигуры, линии, текст и управлять их свойствами.
Two.js предоставляет следующие базовые фигуры:
Rectangle, Circle, Ellipse,
Polygon, Path, Line. Каждая
фигура создаётся через объект two:
const circle = two.makeCircle(400, 300, 50); // x, y, радиус
circle.fill = '#FF8000';
circle.stroke = '#000000';
circle.linewidth = 2;
Основные свойства фигур:
fill — цвет заливки.stroke — цвет обводки.linewidth — толщина линии.opacity — прозрачность.translation — перемещение фигуры
({x, y}).rotation — вращение в радианах.scale — масштабирование ({x, y}).Фигуры можно группировать, используя Group, что упрощает
трансформации нескольких объектов одновременно.
Группы позволяют объединять несколько фигур в один логический блок:
const group = two.makeGroup(circle, rectangle);
group.translation.set(200, 100);
group.rotation = Math.PI / 4;
Изменения свойств группы применяются ко всем её дочерним объектам. Это удобно для создания сложных композиций и анимации нескольких объектов одновременно.
Two.js использует цикл рендеринга, где функция
two.update() обновляет сцену. Для анимации применяется
метод bind с событием 'update':
two.bind('update', function(frameCount) {
circle.rotation += 0.02;
circle.scale = Math.sin(frameCount * 0.05) + 1;
}).play();
Особенности анимации:
frameCount — текущий кадр анимации.rotation) измеряется в радианах.Объект Path позволяет создавать кривые Безье, сложные
линии и формы:
const path = two.makePath(50, 50, 150, 50, 100, 150, true); // точки и замкнутость
path.fill = 'rgba(100, 150, 200, 0.5)';
path.stroke = '#333';
vertices — массив точек пути.closed — замкнутая форма.curve = Two.Types.curve
(linear, catmull-rom, quadratic,
bezier).Two.js поддерживает RGBA и HEX-цвета. Для генеративной графики часто используются прозрачные слои и градиенты:
circle.fill = 'rgba(255, 128, 0, 0.7)'; // прозрачность 0.7
Можно динамически менять цвета в цикле анимации, создавая эффект переливов и плавных переходов.
Генеративная графика строится на алгоритмах, создающих визуальные паттерны. Основные техники:
function branch(x, y, len, angle) {
if (len < 5) return;
const x2 = x + len * Math.cos(angle);
const y2 = y - len * Math.sin(angle);
const line = two.makeLine(x, y, x2, y2);
line.stroke = '#006600';
branch(x2, y2, len * 0.7, angle + 0.3);
branch(x2, y2, len * 0.7, angle - 0.3);
}
branch(400, 600, 100, Math.PI / 2);
for (let i = 0; i < 500; i++) {
const x = Math.random() * 800;
const y = Math.random() * 600;
const circle = two.makeCircle(x, y, Math.random() * 5);
circle.fill = `rgba(${Math.random()*255}, ${Math.random()*255}, ${Math.random()*255}, 0.5)`;
}
Two.js поддерживает текстовые объекты:
const text = two.makeText('Generative Art', 400, 100, { size: 48 });
text.fill = '#FF0000';
text.alignment = 'center';
text.family = 'Arial';
Параметры текста:
size — размер шрифта.family — семейство шрифтов.alignment — выравнивание (left,
center, right).Two.js интегрируется с DOM-событиями. Для генеративной графики часто используют:
mousemove для изменения параметров форм по координатам
курсора.click для генерации новых элементов на сцене.wheel для масштабирования объектов.Пример интерактивного изменения цвета:
document.addEventListener('mousemove', e => {
circle.fill = `rgb(${e.clientX % 255}, ${e.clientY % 255}, 150)`;
});
Two.js поддерживает экспорт в SVG и Canvas.
Для сохранения результата:
const svgData = two.renderer.domElement.toDataURL('image/svg+xml');
const canvasData = two.renderer.domElement.toDataURL('image/png');
Это позволяет использовать созданные генеративные паттерны в вебе и графических редакторах.
Two.js можно комбинировать с:
Комбинирование этих инструментов позволяет создавать сложные, интерактивные и динамические генеративные композиции.