В Three.js управление текстурами осуществляется через объект
THREE.Texture. Среди его ключевых свойств для контроля
отображения текстуры на геометрии выделяются repeat,
offset, wrapS и wrapT. Эти
параметры позволяют задавать повторение, смещение и поведение при выходе
текстуры за пределы координат UV.
repeat — повторение
текстурыСвойство repeat объекта Texture определяет,
сколько раз текстура повторяется по осям U и V:
texture.repeat.set(2, 3);
2) — повторение по оси
U (горизонтальная координата UV).3) — повторение по оси
V (вертикальная координата UV).Если repeat больше 1, текстура многократно отображается
на поверхности. Значения меньше 1 сжимают текстуру на соответствующей
оси. Значения могут быть дробными, например
repeat.set(0.5, 1.5).
offset — смещение
текстурыСвойство offset позволяет смещать текстуру по
координатам UV:
texture.offset.set(0.25, 0.5);
0.25) — смещение по
U.0.5) — смещение по
V.Смещение задается в долях текстуры, где 1 соответствует полной ширине
или высоте. Например, offset.set(1, 0) сдвигает текстуру на
полную ширину по U, что эквивалентно циклическому сдвигу при
повторяющемся паттерне.
wrapS
и wrapT — поведение при выходе за пределы UVСвойства wrapS и wrapT управляют тем, как
текстура ведет себя, если координаты UV выходят за диапазон
[0, 1]:
wrapS — отвечает за ось U.wrapT — отвечает за ось V.Возможные значения:
[0, 1] «зажимаются» к краю текстуры.Пример:
texture.wrapS = THREE.RepeatWrapping;
texture.wrapT = THREE.MirroredRepeatWrapping;
В данном примере текстура по горизонтали повторяется обычным образом, а по вертикали — с зеркальными отражениями.
repeat, offset и wrapСвойства repeat и offset работают совместно
с wrapS и wrapT:
RepeatWrapping повторение за пределами
[0, 1] определяется значением repeat.ClampToEdgeWrapping значение repeat
влияет на растяжение текстуры, но вне [0,1] цвет граничного
пикселя используется.MirroredRepeatWrapping сочетает повторение с
зеркальными переворотами при каждом повторе.const floorTexture = new THREE.TextureLoader().load('floor.jpg');
floorTexture.wrapS = floorTexture.wrapT = THREE.RepeatWrapping;
floorTexture.repeat.set(10, 10);
const floorMaterial = new THREE.MeshStandardMaterial({ map: floorTexture });
const floor = new THREE.Mesh(new THREE.PlaneGeometry(500, 500), floorMaterial);
floor.rotation.x = -Math.PI / 2;
scene.add(floor);
function animate() {
requestAnimationFrame(animate);
waterTexture.offset.y += 0.01;
renderer.render(scene, camera);
}
Смещение позволяет создавать эффект движения воды, облаков или ленточного фона.
const patternTexture = new THREE.TextureLoader().load('pattern.png');
patternTexture.wrapS = patternTexture.wrapT = THREE.MirroredRepeatWrapping;
patternTexture.repeat.set(4, 4);
Такой подход удобен для симметричных декоративных элементов, где важно избегать резких стыков текстуры.
repeat и offset требуют
установки texture.needsUpdate = true, если текстура уже
применена к материалу.MirroredRepeatWrapping важно, чтобы размеры
текстуры были степени двойки (например, 256×256, 512×512) для
корректного отображения на всех платформах.offset с
RepeatWrapping для плавного циклического движения.Эти механизмы дают полный контроль над отображением текстур на любых объектах, позволяя создавать сложные и динамичные визуальные эффекты без изменения геометрии модели.