Sie sind auf Seite 1von 5

Introduccin a la iluminacin en OpenGL

Las escenas en Opengl tienen varias fuentes de luz que pueden estar
apagadas o encendidas independientemente. La luz puede estar iluminando
un toda la escena (luz ambiental) o solamente una direccin determinada.
Las fuentes de luz slo hacen su efecto cuando la escena consta de
superficies u objetos que absorben o reflejan luz.. Los objetos pueden
producir su propia luz, existen dos formas:

Reflexin difusa: luz en todas direcciones.

Reflexin especular: genera un brillo en una direccin.

La iluminacin se divide en cuatro tipos: emitida, ambiente, difusa y


especular.
Para iluminar una escena debemos seguir los pasos siguientes:

Definimos los vectores normales para todos los vrtices de los


objetos.

Colocamos las fuentes de luz.

Elegimos el tipo de luz a colocar.

Escogemos el tipo de material de cada objeto.

DEFINICIN DE VECTORES NORMALES


Lo primero es determinar como vamos a orientar los objetos hacia las
fuentes de luz.
Si no utilizamos primitivas bsicas al construir el objeto, deberamos
utilizar las funciones:
glNormal: la normal de cada vrtice.
glVertex: asigna una funcin a dicho vrtice.
Un ejemplo de construccin de un objeto de esta manera:

glBegin
glNormal3vfv(a1);
glVertex3fv(b1);
glNormal3vfv(a2);
glVertex3fv(b2);
glNormal3vfv(a3);
glVertex3fv(b3);
glNormal3vfv(a4);
glVertex3fv(b4);
glEnd();

(GL_POLIYGON);

COLOCAMOS LAS FUENTES DE LUZ


Para definir las fuentes de luz tenemos que definir primero sus
propiedades: color, posicin, direccin. Usamos glLight:
void glLight (GLenum luz, GLenum nombre, TYPOparam);
Se crea la fuente de luz que indica el parmetro luz, hay 8 fuentes de luz en
la definicin estandar: LIGHT0,....,LIGHT7.
El argumento nombre especifica las caractersticas de la luz, que son unos
parmetros ya definidos en Opengl:
GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_POSITION, GL_SPOT
_DIRECTION, GL_SPOT_EXPONENT, GL_SPOT_CUTOFF,GL_CONSTAN
T_ATTENUATION, GL_LINEAR_ATTENUATION, GL_QUADRATIC_ATT
ENUATION.
GL_DIFFUSE Y GL_ESPECULAR slo se usan con la primera fuente de
luz.

Un
ejemplo
de
glLight
glLightfv (GL_LIGHT0, GL_AMBIENT, luz ambiental);

sera:

Primero se activa la luz de la escena porque sino al activar los objetos


primero despus no se vera el efecto de luz. La funcin que hace la funcin
es glEnable.
glEnable(nombre de la fuente de luz a activar).

Tambin existe una funcin para desactivar la iluminacin, que es glDisable.


Color
El color lo indicamos utilizando sus componentes:

Ambiente: aportacin a la luz ambiental de la escena.

Difusa: color de la fuente de luz.

Especular: color del brillo especular que produce la fuente de luz.

Posicin
Puede haber dos tipos de fuentes de luz segn la posicin:

Direccionales: (x, y, z, 0).Marcamos el vector direccin y la luz se


sita en el infinito.

Posicionales: (x,y,z,w).Marcamos la posicin


homogneas y la luz se sita en la escena.

en

coordenadas

Las transformaciones que se le hacen a los objetos con la matriz del


modelo/vista tambin las sufren las fuentes de luz.
Atenuacin
Podemos conseguir este efecto en Opengl en las luces posicionales si
definimos los parmetros de atenuacin.

Modelos de iluminacin
Tenemos 3 componentes:

La intensidad de la luz global.

La posicin del observador .

La forma de iluminar los polgonos.

Para hacer que la luz ambiente no sea la de ninguna fuente de luz,


utilizamos:

GLfloat luz_ambiental[] = { 0.2, 0.2, 0.2, 1.0 };


glLightModelfv (GL_LIGHT_MODEL_AMBIENT, luz_ambiental);

Por defecto situamos al observador en el infinito y entonces la luz afecta


de la misma manera a todos los objetos pero si lo situamos en otra posicin
distinta (posicin local) , la iluminacin tendra que variar. Este cambio se
puede realizar con:
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
Esta funcin coloca el punto de vista para la iluminacin en (0,0,0).
Si queremos volver a situar al observador en el infinito utilizamos esta
funcin de nuevo pero con GL_FALSE.
Propiedades del material
Dependiendo de las propiedades de los materiales la luz tiene un efecto
distinto sobre ellos
Estas propiedades se definen con glMaterial:
void glMaterial(GLenum cara, GLenum nombre, TYPOparam);
El argumento cara, determina la cara del objeto en la que aplicamos las
propiedades, tiene los siguientes valores:
GL_FRONT,GL_BACK,GL_FRONT_AND_BACK.
El siguiente indica la propiedad que va utilizarse para dicha cara,puede ser:
GL_AMBIENT, GL_DIFFUSE, GL_AMBIENT_AND_DIFFUSE, GL_SPEC
ULAR, GL_SHININESS, GL_EMISSION, GL_COLOR_INDEXES.
Reflexin ambiente y difusa
La reflexin difusa determina el color de un objeto.
La reflexin ambiente determina la forma en que el objeto refleja la luz
ambiental que recibe.

Reflexin especular
La reflexin especular determina el color de los brillos del objeto, se
controla con el parmetro GL_SHININESS.Si su valor es muy alto el brillo
estar ms concentrado.
Emisin
Podemos hacer que parezca que los objetos emiten una luz de un color
determinado, asi podemos conseguir el efecto de lmparas, por ejemplo. Si
ponemos una fuente de luz en dicho punto tambin el efecto es an mejor.
Cambio de las propiedades del material
Para realizarlo utilizamos la funcin glColorMaterial:
void glColorMaterial (Glenum cara, Glenum modo).
Cara puede tomar los valores que tena en la funcin glMaterial y modo los
siguientes:
GL_AMBIENT_AND_DIFFUSE,
GL_SPECULAR o GL_EMISIN.

GL_DIFFUSE,

Podemos cambiar el color ahora para la nueva cara utilizando glColor.


Despus de realizar estos cambios debemos llamar a glEnable con el
argumento GL_COLOR_MATERIAL para que los cambios tengan el efecto
deseado.
glColorMaterial(GL_FRONT,
glEnable(GL_COLOR_MATERIAL);

GL_DIFFUSE);

Das könnte Ihnen auch gefallen