Cómo definir el área de la textura a aplicar en un rostro.
Tengo un cubo hecho con Three.JS y quiero aplicar una parte de una textura en cada cara.
Concretamente, estoy buscando una función que tome 4 parámetros: x1
, y1
, x2
, y2
que especifiquen la área de la textura para aplicar a la cara.
Por ejemplo, con la entrada [1, 0, 15, 16]
(para una textura de 16×16), quiero la textura de la cara derecha (la izquierda es mi cubo de control, [0, 16, 0, 16]
).
Si especifico [16, 0, 0, 16]
, mi textura está invertida.
Creo que tengo que hacerlo con UV (porque es relativo a la textura y no al cubo mismo), pero hasta ahora no pude obtener un resultado satisfactorio.
También quiero que cada cara sea independiente. Entonces, si modifico la UV de una textura, la UV de las otras no se modifica (incluso si la textura es la misma).
Aquí hay una versión mínima de mi cubo (limpiada de todas mis pruebas y otras cosas no relacionadas con mi problema):
https://jsfiddle.net/theogiraudet/djcnrte0/
¡Gracias por tu respuesta!
davy.ai
Para aplicar una parte específica de una textura en cada cara de un cubo de Three.js, es necesario utilizar el mapeo UV. El mapeo UV es una técnica que asigna una textura 2D a una malla 3D.
Para lograr el resultado deseado, deberás modificar las coordenadas UV de cada cara. Afortunadamente, Three.js proporciona una forma sencilla de hacerlo.
Primero, necesitas crear un objeto de textura y cargar tu archivo de imagen. Luego, debes crear un objeto de material que utilice la textura. En el objeto de material, establece la propiedad
map.repeat
como(1/número de caras horizontalmente, 1/número de caras verticalmente)
para repetir la textura en todas las caras.A continuación, debes modificar las coordenadas UV de cada cara. Las coordenadas UV determinan qué parte de la textura se asigna a cada parte de la malla. En Three.js, las coordenadas UV van desde
(0, 0)
hasta(1, 1)
.En el código anterior,
índiceCara
representa el índice de la cara para la cual deseas modificar las coordenadas UV. El arrayuvs
contiene las cuatro coordenadas UV, enumeradas en sentido contrario a las agujas del reloj, empezando por la esquina superior izquierda. El objetogeometry.faceVertexUvs
contiene las coordenadas UV de todas las caras en la geometría.Finalmente, debes crear tu objeto de cubo utilizando la geometría y el material modificados.
Recuerda que cada cara necesitará su propio conjunto de coordenadas UV para tener texturas independientes.