Texturas en 1D

Transcripción

Texturas en 1D
Computación Gráfica
Unidad IV: Modelado de la terminación superficial
Docentes:
Néstor Calvo
Ángel Calegaris
Walter Sotil
2008
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
2
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.
t
f(s,t)
punto del modelo
(píxel del framebuffer)
s
téxel
Texturas
3
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.
t
s
Textura 1D
Aplicada a sup. cuadrada
Texturas
4
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
5
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
6
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.
s
t
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.
Texturas
7
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
8
Repetición de la textura
¿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);
Textura original
Textura con Clamping
Texturas
9
Repetición de la textura
•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);
Textura original
Textura con Wrapping
Texturas
10
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
11
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
12
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
13
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
14
Filtrado
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.
Texturas
15
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
16
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.
4 téxels
ponderados
píxel
téxel
Utilización de filtro de magnificación:
izq. puntual, der. lineal
Texturas
17
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
18
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
19
Mipmapping
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.
Texturas
20
Mipmapping con OpenGL
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ál es 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).
MIPMAPS desactivados
MIPMAPS activados
Texturas
21
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
22
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
23
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
24
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
25
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
26
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
27
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
28
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
29
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
30
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
31
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
32
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
Texturas
33

Documentos relacionados