Logo Studenta

texturas ppt

¡Este material tiene más páginas!

Vista previa del material en texto

Computación Gráfica
Unidad IV: Modelado de la terminación superficial
Docentes:
Néstor Calvo
Ángel Calegaris
Walter Sotil
2008
Texturas 2
Introducción
•Con los modelos de sombreado se obtienen superficies 
iluminadas pero carentes de realismo.
•Dibujar superficies sencillas como una pared requeriría 
gran cantidad de polígonos.
•Las texturas solucionan estos problemas permitiendo 
simular superficies complejas con baja cantidad de 
polígonos, suministrando realismo a la escena e 
incrementando drásticamente el nivel de detalle.
Texturas 3
Introducción
•'Pegar' una textura sobre un objeto consiste en definir una 
función unívoca (función de mapeo o mapping) que a cada 
punto de una superficie le hace corresponder un punto de una 
imagen.
•A los píxeles de la textura se los denominan téxels. La 
palabra píxel se reserva para los fragmentos rasterizados.
s
t
f(s,t)
punto del modelo
(píxel del framebuffer)
téxel
Texturas 4
Tipos de texturas
Según la dimensión del espacio de textura, podemos 
distinguir tres tipos de textura:
•Texturas en 1D: Tiene un único téxel de ancho o de 
alto. Rápida generación.
Textura 1D Aplicada a sup. cuadrada
s
t
Texturas 5
Tipos de texturas
•Texturas en 2D: Es una imagen. Se podría pensar que se 
le está pegando una foto plana a una superficie en 3D.
Es el tipo de textura más utilizado.
Al igual que la textura en 1D, se compone de valores de 
color RGB y pueden incluir valores alfa (de transparencia).
Texturas 6
Tipos de texturas
•Texturas en 3D: No se pega una foto, sino que hay un 
volumen con información de color, el cual es asignado al 
objeto en 3D. El resultado visual es equivalente al que 
aparecería si 'esculpiéramos' el objeto. 
Se elimina la necesidad de definir nuevas texturas para el 
interior de la figura (al hacer clipping para ver el interior).
Necesita mucha memoria.
Se utiliza en juegos, visualización médica, etc.
A partir de OpenGL 1.2
Texturas 7
Espacio de Parámetros e Interpolación de texturas
¿Cómo se le asigna la textura plana al objeto?
Las dimensiones del espacio de textura están normalizadas, 
de manera que todas sus coordenadas varían entre 0 y 1.
Se realiza una asignación punto a punto.
A cada vértice de cada primitiva se le asignan coordenadas 
{s,t} entre 0 y 1, definiendo un área de correspondencia 
entre el modelo y la textura que se mapea finalmente por 
interpolación.
s
t
Texturas 8
Coordenadas {s,t} - Interpolación de textura
Estas áreas no son necesariamente iguales, sino que la 
textura se expande o contrae para cubrir la primitiva.
En el interior de la primitiva se realiza una interpolación 
de las coordenadas de la textura.
Texturas 9
¿Que ocurre cuando se referencia coordenadas de texturas 
con un valor mayor que 1 o menor que 0?
•Clamping: Permite repetir los téxels de los bordes de la 
textura cuando se referencia fuera de ella.
Asigna las coordenadas de forma que:
s = clamp(s,0,1); t = clamp(t,0,1)
En Opengl:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
Repetición de la textura
Textura original Textura con Clamping
Texturas 10
•Wrapping: Consiste en repetir la textura completa en la 
primitiva. La imagen de la textura está repetida varias 
veces. Permite trabajar con texturas mas chicas y ahorrar 
memoria.
Asigna las coordenadas de forma que:
s = s-int(s); t = t-int(t)
En Opengl:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
Repetición de la textura
Textura original Textura con Wrapping
Texturas 11
Modos de mezcla
•Cuando aplicamos una textura debemos especificar como 
queremos que se mezcle con el color del objeto.
•glTexEnv() permite elegir entre 4 métodos (o environment
parameters) que tienen como objetivo determinar el valor 
RGBA final de cada píxel a visualizar a partir del color de la 
superficie del objeto a texturizar (fragmento) y del color de 
la textura (téxel):
- Replace (Sustitución)
- Decal (Sustitución con transparencia)
- Modulate (Modulación)
- Blend (Mezcla)
Texturas 12
Modos de mezcla
•Replace (Sustitución): En este modo el color utilizado 
para el objeto es el de la textura.
•Decal: En este modo se diferencian dos casos.
Si trabajamos con formato de textura RGB el color 
utilizado para el objeto es el de la textura.
En cambio, con formato de textura RGBA, el color a 
utilizar es una mezcla del color de la superficie y el de la 
textura, predominando más uno y otro dependiendo del 
valor alpha de la textura.
Texturas 13
Modos de mezcla
•Modulate(Modulación): Permite ir escalando el color final 
entre el color original de la superficie y el negro, multiplica 
cada color de l objeto por el de la textura.
También puede modular la transparencia (alpha) hasta hacer 
invisibles algunas partes del objeto.
Multiplicar colores sirve para ciertos efectos especiales (matar
o dejar vivo sólo un color)
Texturas 14
Modos de mezcla
•Blend (Mezcla): Se utiliza para mezclar los valores del 
color de la superficie con los de la textura, mediante un 
factor Cc que indica el peso relativo de la textura. Si la 
textura tiene alpha, los alpha se multiplican.
Cc indica el peso de las componentes R, G, B y se define 
con GL_TEXTURE_ENV_COLOR.
Texturas 15
Cuando la cantidad de píxeles no coincide con la cantidad 
de téxels aparecen efectos visuales que disminuyen la 
calidad del resultado, entonces se utilizan filtros.
•Magnificación: Cuando los téxels al ser proyectados 
sobre los objetos aparecen mayores que los píxeles de la 
imagen, y la textura se ve 'pixelada', como una 
'cuadricula'.
•Minimización: Cuando los téxels proyectados son más 
pequeños que los píxeles y la textura parece cortada.
Filtrado
Texturas 16
Filtrado
Para poder suavizar los defectos y adaptar las texturas, se 
aplica una serie de operaciones o filtros.
•Filtros de magnificación: indican cómo calcular el color de 
un píxel de la imagen cuando los téxels ocupan varios píxeles.
Opengl define dos filtros: 
-GL_NEAREST (o puntual): se elige el punto de la textura más 
cercano a las coordenadas del píxel. Es el filtro por defecto y el 
menos costoso, pero produce el efecto de dentado.
Texturas 17
Filtrado
Filtros de magnificación:
-GL_LINEAR: se realiza una interpolación bilineal (promedio 
ponderado) entre los colores de una matriz de 2×2 téxels 
(los que están más cerca del centro del píxel evaluado) de 
forma que aparece la imagen suavizada, produciendo un 
resultado borroso, pero que elimina el dentado.
Utilización de filtro de magnificación: 
izq. puntual, der. lineal
4 téxels
ponderados
píxel
téxel
Texturas 18
Filtrado
•Filtros de Minimización: indican cómo calcular el color de 
un píxel de la imagen cuando los téxels son más pequeños que 
los píxeles.
Opengl define dos filtros: 
-GL_NEAREST (o puntual): se elige el téxel situado en el 
centro del píxel. Problema: si la posición cambia ligeramente 
se producen los efectos de dentado y fluctuación de la textura.
Texturas 19
Filtrado
Filtros de Minimización:
-GL_LINEAR: Igual al filtro de magnificación lineal; se 
realiza una interpolación bilineal (ó promedio ponderado) 
entre los colores de una matriz de 2×2 texels cercanos al 
centro del píxel evaluado. Elimina el dentado.
Texturas 20
Problema: Cuando un objeto con textura se aleja de la 
posición del observador, la textura debe disminuir en tamaño 
en relación con la imagen proyectada.
Mipmaps: Se guardan distintas versiones de la misma 
textura, con diferentes resoluciones. Mejora el rendimiento al 
utilizar versiones de menor resolución de la textura a medida 
que nos alejamos. Solucionan problemas de minimización.
Tiene un consumo mayor de memoria.
Mipmapping
Texturas 21
glTexImage2D(): Se deben proporcionar texturas de todos 
los tamaños en potencias de 2 tales que los tamaños estén 
comprendidos entre la máxima resolución y la resolución1x1.
gluBuild2Dmipmaps(): Dada una única textura, genera 
automáticamente texturas para resoluciones menores.
Durante la visualización se escoge dinámicamente cuáles el 
nivel del mipmap que hay que aplicar en cada caso (aquel en 
el que el tamaño del téxel proyectado sobre el objeto sea 
aproximadamente el de un píxel).
Mipmapping con OpenGL
MIPMAPS desactivados MIPMAPS activados
Texturas 22
Mipmapping con OpenGL
Se usa la función glTexParameter() para establecer más 
opciones en los filtros de minimización.
Los dos últimos son costosos en tiempo de ejecución.
Texturas 23
Tipos de mapeo
•Mapeo Directo y Plano:
Consiste en aplicar la textura como un plano,
directamente sobre el objeto.
Es el ideal para suelos, paredes y demás
superficies lisas.
No suelen obtener resultados apropiados para superficies que 
no sean planas.
En OpenGL se define una normal al plano de aplicación que se 
mueve con la visual o con el objeto.
Mapeo en dos partes:
Se mapea la textura como si fuese una superficie 3D enrollada 
sobre el objeto, ya sea en forma cúbica, cilíndrica o esférica. 
Se define el método en cada dirección (S,T). Primero se mapea 
la textura sobre un objeto de referencia y luego se define 
como se mapea este sobre el objeto (O-Mapping).
No está implementado en OpenGL en forma automática, hay 
que calcular y asignar coordenadas de textura a cada vértice.
Texturas 24
Tipos de mapeo
•Mapeo cúbico:
Sobre el objeto de referencia, se proyecta la imagen de forma 
plana, pero aplicando la textura desde los tres ejes de 
coordenadas.
Mapeo cúbico - Aplicación a superficie 3D
Texturas 25
Tipos de mapeo
•Mapeo cilíndrico :
Es el más conveniente para objetos cilíndricos como tubos, 
troncos, etc. No se producen distorsiones porque simplemente 
envuelve al objeto de referencia siguiendo uno de sus ejes.
•Mapeo esférico:
La textura se contrae en los polos de la imagen y se expande 
por el centro, por lo que las imágenes se distorsionan para 
adaptarse a la forma esférica.
Es el ideal para objetos esféricos de superficie lisa, como 
balones, globos, etc.
Mapeo cilíndrico Mapeo esférico
Texturas 26
Tipos de mapeo: O-Mapping
Existen varias técnicas para mapear las superficies 
tridimensionales del objeto de referencia al objeto final:
•Reflected ray: Se traza un rayo desde el punto de vista del 
observador, el reflejo de éste sobre el objeto incidirá sobre la 
superficie intermedia, y así se decide qué puntos de la textura 
se corresponden con los del objeto. 
Texturas 27
Tipos de mapeo: O-Mapping
•Object normal: Se calcula la normal de un punto del objeto, 
y el punto en el cual ésta corte a la superficie intermedia será
el que le corresponde a la hora de aplicarle la textura.
•Object centroid: Se calcula una línea entre el centroide del 
objeto y un punto de este. El punto en el cual esta línea corte 
la superficie intermedia, será el que le corresponde al objeto.
Object normal Object centroid
Texturas 28
Environment Mapping
Añade realismo a una escena en la que un objeto recibe 
reflejos del entorno que tiene a su alrededor.
Mapeo de entorno esférico: método más popular de 
environment mapping. Soportado por OpenGL.
Las coordenadas de la textura se calculan por reflexión en las
caras de la primitiva según un mapeo esférico.
Texturas 29
Environment Mapping
Mapeo de entorno esférico con OpenGL: 
Hay que crear un mapa de la textura apropiado (mapeo de 
textura esférico) y entonces hacer que OpenGL genere las 
coordenadas de la textura de forma automática.
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP)
glEnable(GL_TEXTURE_GEN_S)
Textura Mapeo de entorno esférico
Texturas 30
Efectos especiales: Líneas de perfil
Se corta al objeto con un plano y se distribuye la textura en función 
de la distancia al plano.
La normal al plano indica la orientación de la textura.
OpenGL genera las coordenadas de textura automáticamente con 
glTexGen().
El plano queda definido por un punto P0(x0,y0,z0) y un vector 
n(a,b,c) ortogonal al plano
(P - P0) . n = 0 ; d = ax0 + by0 + cz0 = n . P0
Textura 1D
Mapeo con wrapping activado
Texturas 31
Efectos especiales: Bump Mapping
La geometría del objeto no es afectada, solo se modifican sus 
normales para simular depresiones y picos en su superficie.
Utiliza un espacio 2D de textura, que codifica vectores 
normales en lugar de color.
Al mapear esta textura sobre una superficie, el vector normal 
de ésta se modifica según el valor encontrado en la textura.
Texturas 32
Funciones de OpenGL
glGenTextures()
Aloca memoria.
glBindTexture()
Selecciona una textura.
glTexImage1D() y glTexImage2D() 
Define una textura unidimensional o bidimensional.
glTexEnv()
Selecciona parámetros de la textura (modos de mezcla).
glTexParameter()
Define parámetros de la textura (filtros, wrapping,etc).
glTextCoord()
Especifica la coordenada del punto en la textura. 
glTexGen()
Generación automática de las coordenadas de textura.
glTexSubImage2D()
Sustituye una textura o parte de ella. Resulta menos costoso 
que crear una nueva.
Texturas 33
Fin de la teoría
•¿Preguntas?
•Utilizar OpenGL reference para comprender que hace cada 
comando.
•Bibliografía:
OpenGL Programming Guide (Red Book)
Rosalee Wolfe - DePaul Univ. - Teaching Texture Mapping Visually: 
http://www.siggraph.org/education/materials/HyperGraph/mapping/surface0.htm
Carlos Carrasco y Daniel Sanz - Univ. Salamanca - Mapeado de texturas (tema 11): 
http://gsii.usal.es/~corchado/igrafica/
Mark Killgard (el autor de GLUT) – Nvidia:
http://developer.nvidia.com/object/env_reflections.html
David Green – Drexel Univ. (lecture 7):
http://www.cs.drexel.edu/~david/Classes/ICG

Continuar navegando

Materiales relacionados

58 pag.
Modelado 2D_3D

SIN SIGLA

User badge image

UNCONTROLLED MURDERER

370 pag.
biblia_vray_by_urrechur

SIN SIGLA

User badge image

Guadalupe Conde