В Three.js объект Texture
представляет собой текстуру, которую можно применить к материалам для
придания им визуальных свойств. Текстуры могут быть как простыми
изображениями, так и сложными картами нормалей, отражений или
альфа-каналов. Основной задачей Texture является хранение
данных изображения и управление их отображением на поверхности
геометрии.
Текстура создается через конструктор:
const texture = new THREE.Texture(image);
<img>,
<canvas>, <video>) или объект,
содержащий данные изображения.texture.needsUpdate = true, чтобы она была обработана
рендерером.Для загрузки изображений чаще используют
TextureLoader:
const loader = new THREE.TextureLoader();
const texture = loader.load('texture.jpg');
TextureLoader.load() автоматически устанавливает флаг
needsUpdate и обеспечивает асинхронную загрузку.
Textureimage — исходный источник текстуры.
Может быть изображением, канвой или видео.
mapping — определяет способ
наложения текстуры на геометрию. По умолчанию используется
THREE.UVMapping.
wrapS и
wrapT — режимы оборачивания текстуры по
горизонтали и вертикали:
THREE.RepeatWrapping — повторение текстуры.THREE.ClampToEdgeWrapping — растяжение по краям.THREE.MirroredRepeatWrapping — зеркальное
повторение.repeat — вектор типа
Vector2, задающий количество повторов текстуры в каждом
направлении.
offset — смещение текстуры по
координатам UV.
rotation — угол вращения текстуры
вокруг центра.
center — точка, вокруг которой
происходит вращение.
format — формат пикселей текстуры
(THREE.RGBAFormat, THREE.RGBFormat и
др.).
minFilter и
magFilter — фильтры для масштабирования
текстуры:
THREE.LinearFilter — линейная интерполяция.THREE.NearestFilter — пиксельная, без сглаживания.anisotropy — уровень анизотропной
фильтрации для повышения качества при косом просмотре.
encoding — цветовое пространство
текстуры (THREE.LinearEncoding,
THREE.sRGBEncoding).
Texture тесно связан с координатами UV геометрии.
Координаты UV определяют, как текстура накладывается на вершины объекта.
Например:
geometry.attributes.uv.array; // доступ к массиву UV
Параметры repeat, offset и
rotation изменяют финальное отображение изображения на
поверхности, не меняя исходных координат UV.
Mipmaps создаются автоматически при загрузке текстуры и улучшают качество при уменьшении объекта на экране. Свойства фильтрации управляют выбором текстурного значения:
minFilter — используется при
уменьшении размера изображения на экране.magFilter — используется при
увеличении.texture.minFilter = THREE.LinearMipMapLinearFilter;
texture.magFilter = THREE.LinearFilter;
Использование mipmaps рекомендуется для оптимизации качества и производительности.
Свойство anisotropy усиливает качество
текстуры на угловых поверхностях. Значение берется из возможностей
устройства:
const maxAnisotropy = renderer.capabilities.getMaxAnisotropy();
texture.anisotropy = maxAnisotropy;
Это особенно важно для напольных текстур или дорожек, которые визуально простираются вдаль.
Текстура может быть назначена различным материалам через соответствующие свойства:
const material = new THREE.MeshStandardMaterial({
map: texture, // Основная цветовая текстура
normalMap: normalTexture, // Карта нормалей
roughnessMap: roughnessTexture, // Карта шероховатости
alphaMap: alphaTexture // Карта прозрачности
});
map — базовая текстура цвета.normalMap — изменяет нормали для
имитации рельефа.roughnessMap — задает коэффициент
шероховатости.alphaMap — определяет прозрачные
участки материала.TextureОбновление текстуры Любое изменение исходного изображения требует установки флага:
texture.needsUpdate = true;Клонирование и копирование Текстуры можно клонировать:
const newTexture = texture.clone();
Это полезно для материалов с похожими текстурами, но разными параметрами.
Управление памятью Для удаления текстуры и освобождения GPU-памяти используется метод:
texture.dispose();Поддержка видео и канвасов Текстуры могут
динамически обновляться при использовании <video> или
<canvas>:
const videoTexture = new THREE.VideoTexture(videoElement);
videoTexture.minFilter = THREE.LinearFilter;
videoTexture.magFilter = THREE.LinearFilter;
videoTexture.format = THREE.RGBFormat;Эта гибкость делает Texture центральным элементом при
создании реалистичных и оптимизированных визуальных эффектов в
Three.js.