Anuncios Google

Practica_28 Normal Map

Como soy un impaciente mientras churristian8 sube la nueva práctica nº 28 para el Tutorial SDL + Opengl la cuelgo aquí de momento para que lo podáis ver todos. Os recuerdo que es necesario tener instaladas las librerías SDL.

Descargas:

Hemos visto el uso de las normales de iluminación sobre los vértices y como estas afectan al resultado de la visualización final del objeto. Nos estamos limitando solo a los vértices, pero podríamos usar una textura especial que contuviese la información de tantas normales como puntos tenga. Las normales tienen tres componentes "x,y,z" y una textura puede tener también tres componentes "r,g,b". La idea es usar los valores de las componentes "r,g,b" de una textura como si fuesen los valores de las componentes "x,y,z" de tantas normales como puntos tenga la textura. Con este sistema conseguimos modelos hiperealistas pero usando solo unos pocos vértices.

El único problema es conseguir esa textura especial para un modelo determinado. Se supone que con un programa de dibujo en 3D "Blender o 3D_Studio_Max" creamos dos modelos, uno en alta resolución con tantos detalles como fuera posible y el otro en baja resolución con los mínimos vértices posibles. Después usando el modelo en alta resolución se crea el mapa de normales que se aplica al modelo de baja resolución. Pero en este ejemplo vamos a tirar del buscador de imágenes "google" y usaremos mapas de normales bajados de la red.

Lo primero es comprobar la compatibilidad de las siguientes extensiones sin las cuales no podremos realizar la práctica de Normal Map:

- GL_ARB_texture_cube_map
- GL_ARB_multitexture
- GL_ARB_texture_env_combine
- GL_ARB_texture_env_dot3

Para crear el efecto Normal Map es necesario usar cuatro texturas:

La primera es un CubeMap normalizado que autogeneraremos. En ella aplicaremos los cálculos matemáticos según la posición de una luz respecto al objeto. Para estos cálculos necesitamos la posición de los vértices, la posición de una luz, la inversa de la matriz de modelado, y los vectores N, S y T de cada cara del objeto. 

La segunda es el Mapa de Normales o "Normal Map" que nos hemos bajado con el google, esta contiene la información de las normales para cada punto del objeto. Se combina usando GL_DOT3_RGB.

La tercera es la textura normal o "Diffuse", pero de momento la vamos a utilizar para calcular la iluminación genérica del objeto usando la combinación de GL_MODULATE con GL_PRIMARY_COLOR_EXT. Este paso es necesario para que el objeto esté iluminado por las distintas fuentes de luz.

Y la cuarta y última textura es la misma que la anterior la "Diffuse" o textura normal, pero ahora la combinamos usando GL_MODULATE y por fin hemos terminado.

Pero lo más complicado son los cálculos matemáticos que debemos usar en la textura CubeMap. Lo primero, hay que calcular los vectores N, S y T para cada cara del objeto. N que es la normal se calcula fácilmente usando el producto en cruz de tres puntos de la cara. S y T se calcula usando las coordenadas espaciales y de textura de tres puntos de la cara. Todo esto se llama "Espacio Tangente", y se calcula con la función "normal_map_Espacio_Tangente();"

Lo segundo que antes de dibujar el objeto hay que usar la función "normal_map[0].calcula_Modelview_Invertida( luz[0].position() );" para calcular el desplazamiento de la textura CubeMap Normalizado respecto a la fuente de luz. Todo esto es bastante complejo pero cuando se ven los resultados merece la pena.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de pspgorrister

Impresionante

De nuevo muchas gracias.

¿Por cierto qué tal te fue aquello que te mandé?

 

Un saludo.

Imagen de pipagerardo

Bien.

Bien, toda la información la guardo para cuando la necesite, aunque me cuesta mucho leer documentación en ingles. Pero aún me quedan muchos palos que tocar y cada véz tengo menos tiempo libre, es una pena.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.