🗓️ 11052025 2125
📎
texture_transformations
-
Texture transformations in threeJS can be used to adjust the display of textures_3js without altering the UV map itself
-
Useful for things like tiled textures on floors or walls.
-
However, if you want a texture to fit precisely to a certain area of a model, you would need to adjust the UV map in a 3D modeling tool (like Blender) to correspond to the desired areas of the texture.
Repeat
You can repeat the texture using the repeat
property, which is a Vector2, meaning that it has x
and y
properties.
Try to change these properties:
const colorTexture = textureLoader.load('/textures/door/color.jpg')
colorTexture.colorSpace = THREE.SRGBColorSpace
colorTexture.repeat.x = 2
colorTexture.repeat.y = 3
As you can see, the texture is not repeating, but it is smaller, and the last pixel seems stretched.
That is due to the texture not being set up to repeat itself by default. To change that, you have to update the wrapS
and wrapT
properties using the THREE.RepeatWrapping
constant.
wrapS
is for thex
axiswrapT
is for they
axis
colorTexture.wrapS = THREE.RepeatWrapping
colorTexture.wrapT = THREE.RepeatWrapping
You can also alternate the direction with THREE.MirroredRepeatWrapping
:
colorTexture.wrapS = THREE.MirroredRepeatWrapping
colorTexture.wrapT = THREE.MirroredRepeatWrapping
Offset
You can offset the texture using the offset
property that is also a Vector2 with x
and y
properties. Changing these will simply offset the UV coordinates:
colorTexture.offset.x = 0.5
colorTexture.offset.y = 0.5
Rotation
You can rotate the texture using the rotation
property, which is a simple number corresponding to the angle in radians:
colorTexture.rotation = Math.PI * 0.25
If you remove the offset
and repeat
properties, you'll see that the rotation occurs around the bottom left corner of the cube's faces:
That is, in fact, the 0, 0
UV coordinates. If you want to change the pivot of that rotation, you can do it using the center
property which is also a Vector2:
colorTexture.rotation = Math.PI * 0.25
colorTexture.center.x = 0.5
colorTexture.center.y = 0.5
The texture will now rotate on its center.