Заливка (fill) в Two.js отвечает за внутреннюю окраску геометрических
фигур. Любой объект, созданный через API библиотеки (прямоугольник,
круг, путь), по умолчанию имеет свойства fill и
stroke. Первое определяет цвет внутренней области фигуры,
второе — цвет обводки.
Цвет заливки задаётся через свойство:
shape.fill = 'red';
Допустимы все стандартные CSS-форматы:
'blue', 'green''#ff0000', '#0f0''rgb(255, 0, 0)',
'rgba(255, 0, 0, 0.5)''hsl(0, 100%, 50%)'Two.js не ограничивает разработчика в формате, так как передаёт значение напрямую в canvas или SVG.
Прозрачность заливки задаётся двумя способами:
shape.fill = 'rgba(255, 0, 0, 0.5)';
Значение 0.5 — это альфа-канал (прозрачность), где:
0 — полностью прозрачный1 — полностью непрозрачныйshape.opacity = 0.5;
Важно учитывать:
opacity применяется ко всему объекту (и заливка, и
обводка)Комбинирование:
shape.fill = 'rgba(0, 0, 255, 0.5)';
shape.opacity = 0.5;
Итоговая прозрачность будет перемножаться, создавая более сложный эффект.
Для отключения заливки используется значение null или
'transparent':
shape.fill = 'transparent';
или
shape.noFill();
Метод noFill() является удобной обёрткой и
предпочтителен для читаемости кода.
Заливка может изменяться в процессе выполнения, что особенно важно для анимации:
two.bind('update', function(frameCount) {
shape.fill = `rgb(${frameCount % 255}, 100, 150)`;
});
Two.js автоматически перерисовывает сцену, если используется цикл
обновления (two.play()).
Two.js поддерживает линейные и радиальные градиенты через отдельные объекты.
var gradient = new Two.LinearGradient(
0, 0, 100, 0,
new Two.Stop(0, 'red'),
new Two.Stop(1, 'blue')
);
shape.fill = gradient;
Параметры:
(x1, y1)(x2, y2)Stop)var gradient = new Two.RadialGradient(
0, 0, 50,
new Two.Stop(0, 'white'),
new Two.Stop(1, 'black')
);
shape.fill = gradient;
Каждая остановка задаётся через:
new Two.Stop(offset, color, opacity);
Пример:
new Two.Stop(0.5, 'red', 0.7);
Где:
offset — позиция (0–1)color — цветopacity — прозрачность на этой точкеВсе визуальные свойства Two.js являются реактивными. Изменение
fill автоматически помечает объект как изменённый:
shape.fill = '#00ff00';
Перерисовка происходит без ручного вызова, если активен рендер-цикл.
Если фигуры объединены в группу:
var group = two.makeGroup(shape1, shape2);
group.fill = 'orange';
Свойство fill группы распространяется на дочерние
элементы, если у них не задан собственный цвет.
Частое изменение цвета (например, в анимациях) может влиять на производительность:
Рекомендации:
fillStyle<linearGradient> или
<radialGradient>fill-opacityЗаливка и обводка работают независимо:
shape.fill = 'yellow';
shape.stroke = 'black';
shape.linewidth = 2;
Возможны ситуации:
stroke = 'transparent')noFill())shape.fill = 'rgba(0, 150, 255, 0.3)';
shape.stroke = '#0096ff';
var bg = two.makeRectangle(0, 0, width, height);
bg.fill = new Two.LinearGradient(
0, 0, 0, height,
new Two.Stop(0, '#ffffff'),
new Two.Stop(1, '#cccccc')
);
shape1.fill = 'rgba(255, 0, 0, 0.5)';
shape2.fill = 'rgba(0, 0, 255, 0.5)';
При пересечении создаётся визуальное смешение цветов.
fill может быть не только строкой, но и
объектом (градиент)opacity влияет на всю иерархию
объектаgradient.stops[0].offset = Math.abs(Math.sin(time));
Позволяет создавать живые, динамические эффекты.
function randomColor() {
return `hsl(${Math.random() * 360}, 100%, 50%)`;
}
shape.fill = randomColor();
Распространённые ошибки:
'ff0000' вместо
'#ff0000')two.update() при ручном
режиме)opacity + RGBA)Проверка:
console.log(shape.fill);
Цвет можно менять при взаимодействии:
element._renderer.elem.addEventListener('click', function() {
shape.fill = 'green';
});
Для SVG это работает напрямую, для Canvas требуется дополнительная логика обработки событий.
Заливка в Two.js — это:
Глубокое понимание этих принципов позволяет создавать сложные визуальные эффекты, анимации и интерактивные графические интерфейсы.