Vous êtes sur la page 1sur 7

Captulo 5

Iluminacin

Objetivos del captulo

Despus de leer este captulo, usted ser capaz de hacer lo siguiente:

Comprender cmo las condiciones de iluminacin del mundo real se aproximan mediante
OpenGL
Renderizar objetos iluminados mediante la definicin de las fuentes de luz deseados y el
modelo de iluminacin
definir las propiedades del material de los objetos que se ilumina
manipular la matriz pila para controlar la posicin de las fuentes de luz

Como se vio en el captulo 4, OpenGL calcula el color de cada pxel en una escena final que se
muestra que se mantiene en el frame buffer. Parte de este clculo depende de lo que la
iluminacin se utiliza en la escena y sobre cmo objetos de la escena reflejan o absorben la luz.
Como ejemplo de esto, recordar que el ocano tiene un diferente color en un da brillante y
soleado de lo que hace en un da nublado gris. La presencia de la luz del sol o las nubes determina
si se ve el ocano como turquesa brillante o turbia de color gris-verde. De hecho, la mayora de los
objetos no lo hacen incluso mirar en tres dimensiones hasta que estn encendidos Figura 5-1
muestra dos versiones de la misma escena exacta (un esfera individual), una con iluminacin y otro
sin l.

Figura 5-1: Una esfera iluminada y una esfera sin iluminar

Como puede ver, una esfera sin luz no es diferente de un disco de dos dimensiones. Esto
demuestra cmo fundamental la interaccin entre los objetos y la luz es en la creacin de una
escena tridimensional.

Con OpenGL, puede manipular la iluminacin y objetos en una escena para crear diferentes
tipos de efectos. Este captulo comienza con una introduccin a la eliminacin de la superficie
oculta. Luego se explica cmo controlar la iluminacin en una escena, discute el modelo
conceptual de OpenGL de la iluminacin, y describe en detalle cmo establecer los numerosos
parmetros de iluminacin para lograr ciertos efectos. Hacia el final del captulo, la se
presentan los clculos matemticos que determinan cmo la iluminacin afecta a color.

Este captulo contiene las siguientes secciones principales:

"Un Remocin Ocultos-Surface Survival Kit" describe los conceptos bsicos de la eliminacin
de superficies ocultas de punto de vista.

L "Mundo Real y OpenGL iluminacin", explica en trminos generales cmo se comporta la luz
del mundo y modelos de cmo OpenGL este comportamiento.

L "Un ejemplo sencillo: Representacin de una Esfera Lit" presenta la instalacin de


iluminacin de OpenGL por la presentacin de un programa corto que hace que una esfera
iluminada.

l "Creacin de fuentes de luz", explica cmo definir y fuentes de luz de posicin.

l "Seleccin de un Modelo de iluminacin", trata sobre los elementos de un modelo de


iluminacin y cmo especificarlos.

"Propiedades del material Definicin" explica cmo describir las propiedades de los objetos
para que interactuar con la luz de una manera deseada.

L "La Matemtica de la Iluminacin" presenta los clculos matemticos utilizados por OpenGL
determinar el efecto de las luces en una escena.

L "Iluminacin en color-ndice Mode" se analizan las diferencias entre usar el modo RGBA y
modo de color-index para la iluminacin.

A Hidden-Surface Removal Survival Kit


Con esta seccin, se empieza a dibujar la sombra, objetos tridimensionales, en serio. Con la
sombra polgona, se vuelve muy importante para dibujar los objetos que se encuentran ms
cerca de nuestra posicin de visin y eliminar objetos ocultos por otros ms cerca del ojo.

Al dibujar una escena compuesta por objetos tridimensionales, algunos de ellos podran
oscurecer la totalidad o parte de otros. Cambiar su punto de vista puede cambiar la relacin de
oscurecimiento. Por ejemplo, si ve la escena desde la direccin opuesta, cualquier objeto que
antes estaba en frente de otro ya est detrs de l.

Dibujar una escena realista, estas relaciones oscureciendo deben mantenerse. Suponga que su
cdigo funciona as:

while (1) {

get_viewing_point_from_mouse_position();

glClear(GL_COLOR_BUFFER_BIT);

draw_3d_object_A();

draw_3d_object_B();

Para algunas posiciones ratn, objeto Una fuerza oscura objeto B. Para otros, lo contrario
puede llevar a cabo. Si nada especial que se hace, el cdigo anterior dibuja siempre objeto B
segunda (y por tanto en la parte superior del objeto A) no importa cul es la posicin de
visualizacin se selecciona. En el peor de los casos, si los objetos A y B se cruzan entre s de
manera esa parte del objeto A oscurecido objeto B y parte de B oscurecida A, cambiando el
orden de dibujo no proporcionar una solucin.

Un buffer de profundidad funciona asociando una profundidad o distancia, desde el plano de


la vista (por lo general el recorte cerca avin), con cada pxel en la ventana. Inicialmente, los
valores de profundidad para todos los pxeles se fijan a la ms grande distancia posible (por lo
general el avin lejos de recorte) con el comando glClear () con GL_DEPTH_BUFFER_BIT. A
continuacin, los objetos de la escena se dibujan en cualquier orden.

Clculos grficos en hardware o software convertir cada superficie que se dibuja a un conjunto
de pxeles en la ventana donde aparecer la superficie si no est oscurecida por otra cosa.
Adems, la distancia desde el plano de la vista se calcula. Con profundidad bfer habilitado,
antes de cada pxel se dibuja una comparacin se realiza con el valor de profundidad ya
almacenada en el pxel. Si el nuevo pxel est ms cerca que (frente) lo que es all, los valores
de color y profundidad de la nueva pxeles sustituyen a las que estn inscritos actualmente en
el pxel. Si el profundidad nueva de pxeles es mayor de lo que es en la actualidad hay, el nuevo
pxel se oscureci, y el color y informacin de profundidad para el pxel de entrada se descarta.
Para utilizar el almacenamiento en bfer de profundidad, necesita habilitar el almacenamiento
en bfer de profundidad. Esto tiene que ser hecho slo una vez. antes de dibujo, cada vez que
se dibuja el escenario, es necesario borrar el buffer de profundidad y luego dibujar los objetos
en la escena en cualquier orden.

Para convertir el ejemplo de cdigo anterior para que realice la remocin de la superficie
oculta, modificarlo a la siguiendo:

glutInitDisplayMode(GLUT_DEPTH|....);
glEnable(GL_DEPTH_TEST);
...
while(1){
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
get_viewing_point_from_mouse_position();
draw_3d_object_A();
draw_3d_object_B();
}

El argumento para glClear () despeja tanto la profundidad como buffers de color.

Prueba Profundidad-buffer puede afectar el rendimiento de la aplicacin. Dado que la


informacin se descarta en lugar de utilizarse para el dibujo, la eliminacin de la superficie
oculta puede aumentar su rendimiento ligeramente. Sin embargo, la implementacin de su
buffer de profundidad, probablemente tiene el mayor efecto en el rendimiento. Un buffer de
profundidad "software" (implementado con la memoria del procesador) puede ser mucho ms
lento de un implementado con un buffer de profundidad hardware especializado.

Del mundo real y de iluminacin de OpenGL


Cuando nos fijamos en una superficie fsica, la percepcin de su ojo del color depende de la
distribucin de energas de fotones que llegan y desencadenan sus conos. (Ver "La percepcin
del color" en el Captulo 4.) Esos fotones provienen de una fuente de luz o la combinacin de
fuentes, algunas de las cuales son absorbidos y algunos de los cuales son reflejados por la
superficie. Adems, diferentes superficies pueden tener propiedades muy diferentes - algunos
son brillantes y preferentemente reflejan la luz en ciertas direcciones, mientras que otros
dispersan la luz entrante por igual en todas las direcciones. La mayora de las superficies estn
en algn punto intermedio. OpenGL se aproxima a la luz y la iluminacin como si la luz se
puede dividir en componentes rojo, verde y azul.
Por lo tanto, el color de las fuentes de luz se caracteriza por la cantidad de luz roja, verde y azul
que emiten, y el material de las superficies se caracteriza por el porcentaje de los
componentes rojo, verde, y azul entrantes que se refleja en varias direcciones. Las ecuaciones
de iluminacin de OpenGL son slo una aproximacin pero que funciona bastante bien y se
puede calcular con relativa rapidez. Si usted desea un modelo de iluminacin ms precisa (o
simplemente diferente), que tiene que hacer sus propios clculos en el software. Tal software
puede ser enormemente complejo, ya las pocas horas de lectura de cualquier libro de texto
ptica deben convencerte.

En el modelo de iluminacin de OpenGL, la luz en una escena proviene de varias fuentes de luz
que se puede activar de forma individual y se apaga. Parte de la luz proviene de una direccin
o posicin particular, y un poco de luz en general se dispersa sobre la escena. Por ejemplo,
cuando se enciende una bombilla en una habitacin, la mayor parte de la luz que proviene de
la bombilla, pero un poco de luz viene despus de rebotar en uno, dos, tres, o ms paredes.
Esta rebotado luz (llamado ambiente) se supone que es tan dispersos que no hay forma de
saber su direccin original, pero desaparece si una fuente de luz particular, se apaga.

Por ltimo, puede haber una luz ambiente general en la escena que viene de ninguna fuente
en particular, como si se hubiera dispersado tantas veces que su fuente original es imposible
de determinar.

En el modelo de OpenGL, las fuentes de luz tienen un efecto slo cuando hay superficies que
absorben y reflejan la luz. Cada superficie se supone que est compuesta de un material con
diversas propiedades. Un material puede emitir su propia luz (como los faros de un automvil),
podra esparcir un poco de luz entrante en todas las direcciones, y podra reflejar una parte de
la luz entrante en una direccin preferencial como un espejo u otra superficie brillante.

En el modelo de iluminacin de OpenGL, la luz en una escena proviene de varias fuentes de luz
que se puede activar de forma individual y se apaga. Parte de la luz proviene de una direccin
o posicin particular, y un poco de luz en general se dispersa sobre la escena. Por ejemplo,
cuando se enciende una bombilla en una habitacin, la mayor parte de la luz que proviene de
la bombilla, pero un poco de luz viene despus de rebotar en uno, dos, tres, o ms paredes.
Esta rebot luz (llamado ambiente) se supone que es tan dispersos que no hay forma de saber
su direccin original, pero desaparece si una fuente de luz particular, se apaga.

Por ltimo, puede haber una luz ambiente general en la escena que viene de ninguna fuente
en particular, como si se hubiera dispersado tantas veces que su fuente original es imposible
de determinar.

En el modelo de OpenGL, las fuentes de luz tienen un efecto slo cuando hay superficies que
absorben y reflejan la luz. Cada superficie se supone que est compuesta de un material con
diversas propiedades. Un material puede emitir su propia luz (como los faros de un automvil),
podra esparcir un poco de luz entrante en todas las direcciones, y podra reflejar una parte de
la luz entrante en una direccin preferencial como un espejo u otra superficie brillante.
El modelo de iluminacin de OpenGL considera la iluminacin que se divide en cuatro
componentes independientes: emisiva, ambiente, difusa y especular. Los cuatro componentes
se calculan de forma independiente y suman.

Ambiente, difusa y especular Luz

Iluminacin ambiente es luz que se ha esparcido tanto por el ambiente que su direccin es
imposible determinar - que parece venir de todas direcciones. Luz de fondo en una habitacin
tiene una gran componente ambiental, ya que la mayor parte de la luz que llega a su ojo ha
rebotado antes que nada muchas superficies. El proyector tiene un componente ambiental al
aire libre pequea; la mayor parte de la luz viaja en la misma direccin, y ya que ests al aire
libre, muy poco de la luz alcanza el ojo despus de rebotar en otros objetos. Cuando luz
ambiental golpea una superficie, que est dispersa por igual en todas las direcciones.

La componente difusa es la luz que proviene de una direccin, por lo que es ms brillante si se
trata de lleno abajo sobre una superficie que si apenas rebota en la superficie. Una vez que
golpea una superficie, sin embargo, est dispersa igualmente en todas las direcciones, por lo
que parece igual de brillante, no importa donde se encuentra el ojo. Cualquier luz proveniente
de una posicin o direccin en particular probablemente tiene un componente difuso.

Por ltimo, la luz especular proviene de una direccin particular, y tiende a rebotar en la
superficie en una direccin preferida. Un rayo lser bien colimado-rebotando en un espejo de
alta calidad produce casi 100 por ciento reflexin especular. Brillante del metal o de plstico
tiene un componente especular alto y tiza o alfombra tiene casi ninguno. Usted puede pensar
en especularidad como brillo.

Aunque una fuente de luz proporciona una nica distribucin de frecuencias, el ambiente,
difusa y especular componentes pueden ser diferentes. Por ejemplo, si usted tiene una luz
blanca en una habitacin con paredes de color rojo, la luz difusa tiende a ser de color rojo,
aunque la luz que incide directamente en los objetos es de color blanco. OpenGL que permite
establecer los valores de rojo, verde y azul para cada componente de la luz de forma
independiente.

Colores materiales

El modelo de iluminacin OpenGL hace la aproximacin de que el color de un material


depende de los porcentajes de la luz roja, verde y azul de entrada que refleja. Por ejemplo, una
pelota perfectamente roja refleja toda la luz roja entrante y absorbe toda la luz verde y azul
que incide sobre ella. Si ve una bola tal en blanco luz (compuesto por la misma cantidad de luz
roja, verde y azul), todo el rojo se refleja, y ves un rojo bola. Si la pelota se ve en la luz roja
pura, sino que tambin parece ser rojo. Si, sin embargo, la bola roja se ve en luz verde puro,
parece negro (todo el verde es absorbida, y no hay rojo entrante, as que no hay luz

reflejada).

Al igual que las luces, los materiales tienen diferentes colores ambiente, difusos y especulares,
que determinan el ambiente, difusa, y la reflectancia especular del material. Reflectancia
ambiente de un material se combina con la componente ambiental de cada fuente de luz
entrante, la reflectancia difusa con difusa de la luz componente, y de manera similar para la
reflectancia especular y componente. Ambientales y difusos reflectancias definir el color del
material y son tpicamente similares, si no idnticos. Reflectancia especular es generalmente
blanco o gris, de modo que los reflejos especulares terminan siendo el color de la intensidad
especular de la fuente de luz. Si se piensa en una luz blanca brillante en una brillante esfera de
plstico rojo, la mayor parte de la esfera aparece rojo, pero el culminante brillante es blanca.

Adems de ambiente, difusa y colores especulares, materiales tienen un color de emisin, que
simula originario luz de un objeto. En el modelo de iluminacin de OpenGL, el color de emisin
de una superficie agrega intensidad para el objeto, pero no se ve afectado por cualquier fuente
de luz. Adems, el color de emisin no introduce ninguna luz adicional en la escena global.

Los valores RGB para Luces y Materiales


Los componentes de color especificados para las luces significan algo diferente que para los
materiales. Para una luz, los nmeros corresponden a un porcentaje de la mxima intensidad
para cada color. Si los valores de R, G y B para el color de una luz son 1.0, la luz es la ms
brillante posible blanco. Si los valores son 0,5, el color es todava blanco, pero slo a media
intensidad, por lo que parece gris. Si R = G = 1 y B = 0 (lleno de color rojo y verde sin azul), la
luz aparece de color amarillo.

Para los materiales, los nmeros corresponden a las proporciones reflejadas de esos colores.
As que si R = 1, G = 0.5, y B = 0 para un material, que el material refleja toda la luz entrante
rojo, la mitad de la verde entrante, y ninguno de la luz azul entrante. En otras palabras, si una
luz OpenGL tiene componentes (LR, LG, LB), y un material tiene componentes
correspondientes (MR, MG, MB) y, a continuacin, haciendo caso omiso de todos los dems
efectos de reflectividad, la luz que llega al ojo est dada por (LR * MR, LG * MG, LB * MB).

Del mismo modo, si usted tiene dos luces que envan (R1, G1, B1) y (R2, G2, B2) a la vista,
OpenGL aade los componentes, dando (R1 + R2, G1 + G2, B1 + B2). Si alguna de las sumas es
mayor que 1 (correspondiente a un color ms brillante que el equipo puede mostrar), el
componente se sujeta a 1.

Vous aimerez peut-être aussi