Texturado
Fernando Lovera (07-41126)
Fernando Torre (05-38990)
Contenido
●Introduccion
●Mapeo de texturas
●Algoritmos de mapeo
●Texturas en openGL
●Otros tipos de
texturas
Introducción
●
El mundo natural es rico
en texturas: la superficie
de cualquier objeto
visible esta texturizada a
cierto nivel.
●
La riqueza de las texturas
son observadas en los
objetos naturales y
artificiales, tales como la
madera, plantas,
materiales y la piel.
Introducción
● En un sentido general, la palabra
textura se refiere a las
caracteristicas y apariencia de un objeto, dado su tamaño, forma, densidad, estructura y la
proporcion de sus partes elementales.
● Las texturas son descritas como
Lisa o rugosa, dura y gruesa, brillante, etc
● La mayoría de las superficies de los
objetos del mundo real tales como la madera, el mármol, tienen una gran variedad de colores
proveniente no sólo de los distintos efectos producidos por la luz sino también por las diferencias de color en el material.
● Es posible lograr efectos visuales aplicando distintas texturas a la
superficie de objetos tridimensionales, haciendo que ciertos objetos “aburridos o generales” adquieran interes y se vuelvan muy
caracteristicos Una de las formas mas comunas de hacer texturas es con el mapeo UV, y el BMP
● De esta forma se aumenta el detalle de la figura, sin aumentar su
complejidad.
Mapeo de Texturas
●
Mapear texturas consiste en
asociar el color de un punto
con un punto en la imagen de
textura, estableciendo así un
mapeo de puntos de la
superficie a puntos de la
imagen.
●
Una textura puede ser
unidimensional,
bidimensional o
tridimensional.
●El multitexturizado
(multitexturing) es la
aplicación de múltiples
texturas a un mismo objeto.
Textura Unidimensional
Mapeo de Texturas
●
La textura está en el espacio 2D. Entonces se puede detallar el
proceso de mapeo del siguiente modo:
–
Parametrizar puntos en la textura con dos coordenadas
: (s,t)
–
Definir el mapeo de (x,y,z) en el espacio del mundo a
(s,t) en el espacio de textura de acuerdo a un tipo de
proyección
Proyectando la textura de distintos modos
la textura sobre el objeto:
●
Mapeado en proyección plana
●Mapeado en dos partes
Mapeado directo y plano:
Consiste en aplicar la textura directamente sobre el objeto,como si se tratase de un plano. Es ideal para aplicar mapas de imágenes sobre superficies planas porque los resultados son totalmente predecibles y la distorsión es mínima en tanto las superficies tridimensionales sean paralelas a los planos de proyección.
Mapeo en 2 partes
Se mapea la textura como si fuese una superficie 3D enrollada sobre el objeto
(en forma cilíndrica,cúbica 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).
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. Es una variante del mapeado plano, actúa del mismo modo que éste sólo que aplicando la textura desde los tres ejes de coordenadas.
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, y permite un mayor grado de manipulación en el otro para acomodarlo al tamaño.
● Es útil para aplicarlo sobre objetos elongados tales como una zanahoria
o una botella de vino. Puede aplicarse de modo tal que la parte de arriba y la de abajo no se cubran (not capped).
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 UV
● Es el proceso de modelado, convirtiendo una imagen en 2 dimensiones
● Posiblemente se acerca más a la realidad, puesto que la textura está anclada a las coordenadas UV correspondientes (las coordenadas UV son como la longitud y la latitud en una esfera, un valor determinado por dos números que indica la posición exacta de un punto en el espacio). Sólo se tiene que colocar la textura, y retorcer,
estirar o doblar la figura, para que la textura aplicada se acomode a los nuevos valores.
● Los UV son dos coordenadas que se asignan a cada uno de los vértices de un modelo. Así como un vértice tiene tres coordenadas X, Y y Z, referentes a su posición en el espacio, también tienen dos coordenadas más que determinan su posición en un plano
bidimensional que representa la textura. Se puede pensar en los UV como puntos
escondidos que solo pueden manipularse en un espacio 2D.
● A diferencia de los vértices, los UV pueden estar separados de sus caras, lo que permite crear patrones para aplicar las texturas luego.
Perfect Mapping
● Este es el algoritmo mas básico.
● Comenzamos por una solución eficaz, aunque poco eficiente, a la que
iremos haciendo mejoras. Para realizar el mapeado vamos a utilizar tres vectores A, B y C que calcularemos a partir de los valores P, M y N vistos anteriormente mediante las siguientes ecuaciones. Se usa el símbolo ‘x’ para denotar el producto vectorial de dos vectores, y el símbolo ‘*’ para el producto escalar de dos vectores. Se muestra a continuación como se
calculan estos vectores:
● Para cada línea de barrido de coordenada screenY hacer:
A = P x N; B = M x P; C = N x M
● Lo siguiente que tenemos que hacer para cada pixel de la pantalla es, para
cada pixel correspondiente a la línea de barrido, hacer: S = (screenX, screenY, DIST)
a = S * A b = S * B c = S * C
u = ancho_de_la_textura * a / c v = alto_de_la_textura * b / c col = texel de la textura en la posición (u, v)
Affine Mapping
● Surgió porque, aunque Perfect Mapping ofrece buena imagen, no es lo suficientemente rápido para escenas tridimensionales en movimiento.
● Está basado en el uso de la interpolación bi-lineal pare realizar el mapeado.
– Se trata de estirar la textura para ajustarla a los márgenes de cada una de las líneas
de barrido que tenemos del polígono.
– Se calculan unos valores de interpolación mediante los cuales vamos a conocer que
texels de la textura se corresponden con los pixels del polígono.
● El problema de esta técnica se produce cuando el ángulo entre la dirección de vista y la normal al plano del polígono es grande.
– la profundidad varía notablemente para cada una de las líneas de barrido y provoca
que al efectuar el mapeado el objeto representado parezca estar torcido
– El efecto se acentúa según nos acercamos el objeto al punto de vista.
Area Subdivision
Se aplica a objetos que no tienen la propiedad de ser horizontales o verticales. Sigue un esquema basado en el affine, pero sin comprometer tanto la calidad del resultado. Localiza aquellas areas que forman parte de una misma superficie. Tal y como sugiere su nombre, el área total a visualizar es dividida progresivamente en pequeños rectángulos hasta que cada subarea sea "sencilla", es decir, llegue a ser un pixel individual (caso extremo), o esté cubierta totalmente por una parte de una sola superficie o por ninguna superficie.
Scanline Subdivision
● Otra solución parecida a la anterior consiste en dividir no el polígono a
representar sino la línea de barrido. Esto viene justificado ya que los errores que comete el affine se producen según vamos recorriendo la línea de barrido ya que la diferencia en la profundidad de cada uno de los extremos de la línea puede ser notable y este efecto se puede reducir al dividir la línea en segmentos más
pequeños.
De esta manera se consiguen una serie de ventajas
● Se puede ajustar el tamaño de la línea de barrido respecto a
ciertos valores como el ángulo entre el punto de vista y la
normal a la superficie, el tamaño de la pantalla, la distancia al punto de vista, etc..
● Si el tamaño de las líneas de barrido se ajusta a una potencia de
2 conseguimos mejorar el rendimiento del algoritmo affine ya que las divisiones que se efectúan pueden realizarse como desplazamientos.
● Parabolic Mapping: se trata de un método que utiliza la parábola como
herramienta matemática para realizar el render de manera que se obtienen mejores resultados que con el ‘mapeado affine’ a costa de reducir algo la velocidad.
Texturas en openGL
● Una textura, desde el punto de
vista de su almacenamiento en memoria es un array de datos. Cada uno de los valores de este array lo llamamos 'textel'. Este array de datos representa una imagen, que utilizaremos para mapearla sobre un polígono.
● Podemos rellenar dicho array bien cargando una imagen desde un fichero, o
bien dándole nosotros los valores de color a cada texel.
● La información de cada uno de los componente puede ser:
– Las componentes RGB del color – Índices de color.
– Niveles de luminancia (grises).
● En OpenGl las dimensiones de una textura deben ser siempre potencia de 2
Pasos para mapear texturas
sobre polígonos
● Habilitar el texturado
– glEnable(GL_TEXTURE_2D)
● Especificar la textura
– Cualquier entero sin signo puede usarse como nombre de textura.
Generalmente se usa la siguiente primitiva para evitar usar nombres ya usados:
glGenTextures(num, &NomTextura)
– Una vez que se tiene la textura y se puede referirse a ella mediante el
identificador NomTextura, se debe asociar el identificador a la textura que se forma:
glBindTexture(GL_TEXTURE_2D, NomTextura)
● Indicar los parámetros de aplicación de la textura y activar el mapeado de texturas.
– En openGL para especificar las coordenadas de textura de un poligono, se
utiliza glTexCoord2f(s,t) antes de cada vertice, ejemplo: glTexCoord2f(0,0); glVertex3f(x,y,z);
Normales: bump mapping
● Modificacion de normales para dar sensacion de relieve. Es decir, Altera
la orientación de las normales de la superfice durante el proceso de sombreado. En este caso, el mapa de textura es un mapa de normales.
MIP MAPS
● Los mapas MIP(comunmente llamados
mipmaps), son colecciones de imagenes de mapas de bits que
acompa;an a una textura principal para aumentar la velocidad de renderizado y reducir sus artefactos.
● Cada imagen de mapa de bits del
conjunto es una version reducida de la textura principal.
● El renderizador utiliza la textura principal cuando se renderiza a todo detalle, y cambia al mipmap adecuado cuando renderiza la textura desde cierta distancia o en un tamaño menor.
● Se interpolan los dos mipmaps mas cercanos. La velocidad de renderizado aumenta porque la cantidad de
pixeles(“texeles”) procesados pueden ser mucho menor que en una textura comun.
Mapas de Ambiente
●
Los mapas de ambiente crean
una imagen del ambiente que
rodea al objeto como se ve
desde el objeto mismo
●
Generalmente son
implementados con el algoritmo
de mapeo cúbico
Bibliografia
●
Castro, Silvia, et al. “Texturas”
http://www.cs.uns.edu.ar/cg/clasespdf/12-Texturas.pdf
●
Edward, Angel. Interactive Computer Graphics: a Top-Down Approach
With OpenGL, 6th Edition, Pearson Higher Education Edward Angel
Interactive Computer Graphics: a Top-Down Approach With OpenGL, 6th
Edition
●
Foley, James D., et al. Computer Graphics: Priciples and Practice in C,
2nd Edition, Addison Wesley Professional.
●
Humberto et al. “Computación Gráfica”
http://es.wikipedia.org/wiki/Computaci%C3%B3n_gr%C3%A1fica
●