La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Computación Gráfica Unidad IV: Modelado de la terminación superficial Docentes: Néstor Calvo Ángel Calegaris Walter Sotil 2008.

Presentaciones similares


Presentación del tema: "Computación Gráfica Unidad IV: Modelado de la terminación superficial Docentes: Néstor Calvo Ángel Calegaris Walter Sotil 2008."— Transcripción de la presentación:

1 Computación Gráfica Unidad IV: Modelado de la terminación superficial Docentes: Néstor Calvo Ángel Calegaris Walter Sotil 2008

2 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.

3 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

4 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

5 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).

6 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

7 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

8 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.

9 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

10 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

11 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)

12 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.

13 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)

14 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.

15 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

16 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.

17 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

18 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.

19 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.

20 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

21 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á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). Mipmapping con OpenGL MIPMAPS desactivados MIPMAPS activados

22 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.

23 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.

24 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

25 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

26 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.

27 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 normalObject centroid

28 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.

29 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

30 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 P 0 (x 0,y 0,z 0 ) y un vector n(a,b,c) ortogonal al plano (P - P 0 ). n = 0; d = ax 0 + by 0 + cz 0 = n. P 0 Textura 1D Mapeo con wrapping activado

31 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.

32 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.

33 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: Carlos Carrasco y Daniel Sanz - Univ. Salamanca - Mapeado de texturas (tema 11): Mark Killgard (el autor de GLUT) – Nvidia: David Green – Drexel Univ. (lecture 7):


Descargar ppt "Computación Gráfica Unidad IV: Modelado de la terminación superficial Docentes: Néstor Calvo Ángel Calegaris Walter Sotil 2008."

Presentaciones similares


Anuncios Google