Jose María Buades Rubio Light Maps Iluminación mediante multitextura
Multi-textura Es la combinación de varias texturas sobre una superficie Puede estar acelerado por hardware GL_ARB_multitexture Se puede realizar por software renderizando la misma superficie n veces, renderización multi-paso
Multi-textura — Multi-paso Multi-pasoMulti-textura Select (texture)Select (texture, lightmap, fogmap) Draw (object)Draw (object) Select (lightmap) Draw (object) Select (fogmap) Draw (object)...
Light 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ó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
Ejemplos Frame renderizado usando un mapa de luz calculado mediante radiosidad, el cálculo del mapa de luz llevó una hora
Renderización solo con mapa de luz, sin filtrar
Renderización solo con mapa de luz filtrado
Renderización solo con texturas y sin iluminación
Renderización multitextura, sin filtrar el mapa de luz
Renderización multitextura, filtrando el mapa de luz
Soft ShadowsNo Soft Shadows Sin filtrar Filtrado
Textura sin filtradoMip-mapping filtrado Mapa de luz sin filtrarMapa de luz con filtrado lineal
Escena renderizada con mip-mapping filtrado y mapa de luz aplicado Mapa de niebla filtradoCombinación de todo
Multitextura en OpenGL Determinar el numero de unidades de texturizacion int iTextureUnits; glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &iTextureUnits);
Multitextura 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 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: Demo.zip Demo.zip