Библиотека Two.js предоставляет мощные возможности для работы с графикой, включая использование текстур для придания объектам визуальной глубины и реализма. В основе работы с текстурами лежит объект Two.Texture, который позволяет загружать изображение и применять его к фигурам, линиям или фонам сцен.
Объект создается с помощью конструктора:
const texture = new Two.Texture('path/to/image.png', callback);
Пример использования:
const texture = new Two.Texture('textures/wood.jpg', () => {
console.log('Текстура загружена');
});
Текстура автоматически создается и готова к применению после загрузки изображения.
image – объект HTMLImageElement,
который хранит загруженное изображение.
repeat – режим повторения текстуры. Возможные значения:
'repeat' – текстура повторяется по горизонтали и
вертикали.'repeat-x' – повторяется только по горизонтали.'repeat-y' – повторяется только по вертикали.'no-repeat' – текстура отображается один раз.offset – смещение текстуры относительно фигуры.
Объект {x, y} задает сдвиг в пикселях.
scale – масштаб текстуры. Объект
{x, y} позволяет растянуть или сжать изображение по
осям.
loaded – булевое значение, показывающее, загружена ли текстура полностью.
Пример задания свойств:
texture.repeat = 'repeat';
texture.offset = { x: 10, y: 20 };
texture.scale = { x: 0.5, y: 0.5 };
После создания текстуры её можно привязать к любому объекту Two.js,
поддерживающему заливку (fill) или контур
(stroke).
const two = new Two({ width: 500, height: 500 }).appendTo(document.body);
const circle = two.makeCircle(250, 250, 100);
circle.fill = texture;
circle.noStroke();
two.update();
В данном примере круг окрашен текстурой wood.jpg. Two.js
автоматически учитывает размеры и масштаб текстуры, если не задано
иное.
const rect = two.makeRectangle(250, 250, 300, 150);
rect.fill = texture;
texture.repeat = 'repeat';
rect.noStroke();
two.update();
Режим repeat позволяет повторять изображение по всей
площади фигуры, создавая бесшовный эффект.
Two.Texture поддерживает обновление изображения на лету:
texture.image.src = 'textures/metal.jpg';
texture.loaded = false;
texture._update(); // Обновление текстуры в сцене
two.update();
Это полезно для анимаций или интерактивных приложений, где изображение меняется в зависимости от действий пользователя.
Two.js позволяет комбинировать текстуры с другими заливками через альфа-канал:
const gradient = two.makeLinearGradient(0, 0, 0, 200, new Two.Stop(0, '#ffffff'), new Two.Stop(1, '#000000'));
circle.fill = gradient;
circle.fill.opacity = 0.5; // полупрозрачность
circle.fillTexture = texture; // наложение текстуры
two.update();
Это создает эффект смешанной заливки: градиент и текстура взаимодействуют, добавляя глубину визуального восприятия.
repeat только при необходимости, чтобы
снизить нагрузку на GPU.Two.Texture с
колбэком, чтобы избежать “мигания” при рендере._update() вместо пересоздания объектов.Пример клонирования текстуры:
const texture2 = texture.clone();
rect.fill = texture2;
two.update();
loaded перед использованием
текстуры.offset и scale для точной
подгонки текстуры под фигуру.repeat.image.src и
вызывать _update().Эти возможности позволяют создавать сложные визуальные эффекты в Two.js, сочетая текстуры, градиенты и динамическое управление объектами сцены.