Clase 03 - Después de esta clasel@s alumn@s pueden leer una mesh desde un archivo, calcular estadísticas geométricas básicas (conteos, bounding box, duplicación de vértices) y visualizar los resultados en python.
Clase 04 - Después de esta clasel@s alumn@s pueden inspeccionar y modificar coordenadas UV, identificar distorsión y solapamientos, y explicar cómo mapas de normales y altura afectan la apariencia de una superficie sin cambiar su geometría.

Es una de las técnicas fundamentales en computer graphics para aumentar el realismo de una escena sin incrementar la complejidad geométrica.
En lugar de modelar cada detalle con polígonos, utilizamos imágenes que se “pegan” sobre las superficies. Este proceso es clave en videojuegos, simulaciones y cine.
Esto permite representar materiales complejos como madera, metal o piel sin modelarlos físicamente. El desafío está en cómo hacer coincidir correctamente la imagen con la superficie del objeto.

Cada punto de la superficie necesita saber qué parte de la textura le corresponde.
Para eso definimos una función que asigna coordenadas de textura, llamadas (u,v), a cada punto de la superficie.
Matemáticamente, es un mapeo desde la superficie S a la textura T
ϕ: (x, y, z) -> (u, v)

Definir una buena función ϕ es clave para obtener buenos resultados de texture mapping. Algunos requerimientos que compiten son:
Bijectivity. En muchos casos, queremos que la función ϕ sea biyectiva, es decir que a cada punto de la superficie le corresponde un punto distinto de la texture. A menos que deliberadamente queramos lo opuesto para ahorrar memoria.
Size Distortion. La escala de la textura debe ser aproximadamente constante en la superficie. Dos areas pequeñas en la superficie que tienen areas parecidas, deben también tener areas parecidas en la textura.
Shape Distortion. La textura no debe estar distorsionada. Un circulo pequeño en la superficie debe corresponder 'mas o menos' a un circulo en la textura.
Continuidad. No deben haber muchas 'costuras' (seams). Puntos que son vecinos en la superficie deben corresponder a vecinos en la textura.
La segunda, ya que los cuadrados son "uniformes" es decir no hay tanta distorcion :)
Gonzalo :)
La segunda es mejor dado que la primera presenta distorsiones de tamaño y forma en la joroba y en la cabeza del animal
Vicente R
Pintar la segunda textura sería mas sencillo ya que no hay que tener en cuenta tanto la distorción del cuadrado
Gisueppe
La segunda porque hay menos distorsión, en especial en la joroba
cote
El segundo puesto que no presenta ni distoricion de tamaño ni formas
Mario

Usualmente los valores de (u, v) van de 0 a 1, pero podemos permitir que se salgan de ese rango.
Clamping: los valores fuera del rango se van a clamp a 0,1
u = max(0, min(u, 1))
Tiling o Repeat: si queremos un patron repetitivo (e.g., tablero de ajedrez, muralla de ladrillos)
u = u % 1

Una vez que tenemos coordenadas (u, v), necesitamos acceder al color correspondiente en la textura. Este proceso se llama “lookup”.
La forma más simple es tomar el texel más cercano, pero esto produce resultados de baja calidad.

Cuando una textura tiene más detalle del que un pixel puede representar, aparecen artefactos visuales como parpadeos o patrones extraños. Esto se conoce como aliasing.
El objetivo del antialiasing es evitar estos problemas promediando adecuadamente la información.

Renderizar una imagen con texture mapping es un proceso de muestreo
El color de un pixel corresponde al promedio de los pixeles correspondientes en la textura.
Cuando el footprint es más pequeño que el un textel (i.e., pixel de la textura), estamos magnificando la textura al renderizar.

Generar este upsampling en tiempo real es difícil en computer graphics, el metodo más usado es bilinar-interpolation.
Cuando el footprint es grande, debemos calcular el promedio de muchos textels para evitar antialiasing.
💡Calcular el promedio de areas grandes durante runtime es caro, pero podemos pre-compute los promedios offline.

Un mipmap es una secuencia de texturas que todas contienen la misma imagen pero en resoluciones más y más pequeñas
Level 0 - Imagen original
Level 1 - downsample a la mitad

El mapeo de texturas tiene múltiples aplicaciones más allá del color. Se utiliza para simular iluminación, relieves y reflejos. Es una herramienta clave para lograr realismo sin aumentar el costo computacional.
Normal Map: la normal usada para pintar el modelo (luz) se lee de la textura en vez de los vertex normals.
Bump Map: agregan altura o profundidad visual a la superficie con respecto a la geometría. Se usan para general un normal map.
https://threejs.org/examples/?q=bump#webgl_materials_bumpmap

Displacement Maps: se usan para alterar la geometría. Son similares al bump map, pero el efecto es distinto. La superficie primero se tesela con muchos triángulos pequeños y luego los vertices se mueven.
https://threejs.org/examples/?q=dis#webgl_materials_displacementmap

El codigo `createCylinderGeometry` fue creado por chatgpt y tiene un problema con su textura. Si observas las letras en las tapas del cylindro, aparecen correctamente (A3, A4, etc). Pero en los lados del cylindro aparecen reflejadas
Cómo podemos arreglar el UV map para que se vean correctamente?
Que pasa con el UV map cuando scalo, roto, translado el mesh?
Cómo tendríamos que modificar el UV para utilizar la textura de barril?

Este libro está en biblioteca y está disponible electrónicamente via biblio y también vía 🏴☠️. Intenten usar la opción de biblioteca #support-your-library
Ediciones más antiguas también sirve.
https://threejs.org/manual/?q=tex#en/textures