Post on 03-Feb-2016
Jose María Buades Rubio
Light MapsLight Maps
Iluminación mediante multitextura
Multi-texturaMulti-textura
• Es la combinación de varias texturas sobre una superficie
• Puede estar acelerado por hardwareGL_ARB_multitexture
• Se puede realizar por software renderizando la misma superficie n veces, renderización multi-paso
Multi-textura — Multi-pasoMulti-textura — Multi-paso
Multi-paso Multi-texturaSelect (texture) Select (texture, lightmap, fogmap)Draw (object) Draw (object)
Select (lightmap)Draw (object)
Select (fogmap)Draw (object)
...
Light MapsLight Maps
• Es una técnica multitextura que permite precalcular la iluminación y guardarla en una textura bidimensional
• La ventaja es que la iluminación se puede calcular con cualquier método de iluminación global
• El efecto de realismo es mayor
Técnica de iluminaciónTécnica de iluminación
• Valida para luces estáticas y objetos estáticos
• En los otros casos se realiza una aportación de luz mediante un método local o se recalcula el mapa de luz
• Mapas de luz son de menor resolución que las texturas de color
EjemplosEjemplos
Frame renderizado usando un mapa de luz calculado mediante radiosidad, el cálculo
del mapa de luz llevó una hora
Renderización solo con Renderización solo con mapa de luz, sin filtrarmapa de luz, sin filtrar
Renderización solo con Renderización solo con mapa de luz filtradomapa de luz filtrado
Renderización solo con Renderización solo con texturas y sin iluminacióntexturas y sin iluminación
Renderización Renderización multitextura, sin filtrar el multitextura, sin filtrar el mapa de luzmapa de luz
Renderización Renderización multitextura, filtrando el multitextura, filtrando el mapa de luzmapa de luz
Soft ShadowsNo Soft Shadows
Sin filtrar
Filtrado
Textura sin filtrado Mip-mapping filtrado
Mapa de luz sin filtrar Mapa de luz con filtrado lineal
Escena renderizada con mip-mapping filtrado y mapa de luz aplicado
Mapa de niebla filtrado Combinación de todo
Multitextura en OpenGLMultitextura en OpenGL
Determinar el numero de unidades de texturizacion
int iTextureUnits;
glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &iTextureUnits);
Multitextura en OpenGLMultitextura en OpenGL
Seleccionar la unidad de texturización a la que se refieren las funciones
glActiveTextureARB(GL_TEXTUREi_ARB);
Donde i se refiere a la i-esima unidad de texturización 0 i k –1, k el numero de unidades de texturización
Multitextura en OpenGLMultitextura en OpenGL
Especificar la coordenada de la textura para cada unidad
glBegin(GL_QUADS);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0, 0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.1, 0.2);
glVertex3f(0, 0, 0);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1, 0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.1, 0.8);
glVertex3f(0, 0, 0);
…
glEnd();
Ejemplo: Ejemplo: Demo.Demo.zipzip