Académique Documents
Professionnel Documents
Culture Documents
Iluminación en OpenGL
Contenido
1
1. Habilitar el uso de luces
z Se habilita el uso de luces con:
{glEnable(GL_LIGHTING);
2. Especificar el Modelo
z Los cálculos se hacen para cada
vértice
Sombreado Plano
z Cada polígono tiene una sola normal
2
Sombreado Suave
z El sombreado se interpolará a lo
largo del polígono como antes
se hacía con los colores y por lo
tanto será suave
Sombreado Suave
z Se necesita:
{Calcular las normales de los polígonos
{Calcular las normales en los vértices a partir de
las normales de los polígonos
z Posteriormente:
{Interpolar las normales de los vértices a lo largo
de las aristas
{Calcular la iluminación en las aristas
{Interpolar las aristas a lo largo de los polígonos
3
3. Especificar las normales de las
superficies
z Asigna cada normal con glNormal*()
{ glNormal3f(x, y, z);
{ glNormalfv(p); // donde p es un vector
n = (p2 – p1 ) × (p0 – p1 )
4
Normales Unitarias
z Puede llamarse a
glEnable(GL_NORMALIZE) para que los
vectores automáticamente se hagan
unitarios
Normales Unitarias
z Nota: El método
glEnable(GL_NORMALIZE) no calcula la
normal, sólo la normaliza
4. Especificar luces
z Para cada fuente de luz, se asigna un conjunto
de valores RBG para los términos difuso,
especular y ambiental
5
Luces Puntuales vs.
Direccionales
z La posición está dada por coordenadas
homogéneas y el cuarto elemento determina el
tipo de luz
{Si w = 1.0 entonces se especifica una luz puntual
{Si w = 0.0 entonces se especifica una luz direccional
z Ejemplo w
Glfloat position[ ] = {1.0, 2.0, 0.0, 1.0};
glLightv(GL_LIGHT0, GL_POSITION, position);
Luces Puntuales
Luces Direccionales
z Si w = 0.0 entonces se especifica una luz
direccional
w
Glfloat position[ ] = {1.0, 2.0, 0.0, 0.0};
glLightv(GL_LIGHT0, GL_POSITION, position);
6
Luces tipo “spot”
z La dirección se define con:
Glfloat direction[ ] = {1.0, 2.0, 2.0};
glLightv(GL_LIGHT0, GL_SPOT_DIRECTION,
direction);
7
Propiedades de los Materiales
z Se asignan los valores para los términos difuso,
especular y ambiental con las siguiente líneas:
Materiales Transparentes
8
Propiedades de los Materiales
z Se determina el brillo del material con las
siguientes líneas:
Materiales Emisores
z Se puede dar el efecto de un objeto emisor de
luz (como una estrella) especificando un valor
para GL_EMISSION
Materiales Emisores
glMaterialv(GL_FRONT, GL_EMISSION,
emission);
9
Caras Frontales
Caras Frontales
GL_FRONT, GL_BACK o
GL_FRONT_AND_BACK
Caras Frontales
z Para sombrear las dos caras:
glLightModeli(GL_LIGHT_MODEL_TWO_SIDED,
GL_TRUE);
glLightModeli(GL_LIGHT_MODEL_TWO_SIDED,
GL_FALSE);
10
Distancia a la Fuente de Luz
Atenuación de la Luz
z En el mundo real, la luz es inversamente
proporcional al cuadrado de la distancia entre la
fuente y el objeto (1/d2)
Atenuación de la Luz
11
Atenuación de la Luz
glLightf(GL_LIGHT0,
GL_CONSTANT_ATTENUATION, 0.0);
glLightf(GL_LIGHT0,
GL_LINEAR_ATTENUATION, 0.0);
glLightf(GL_LIGHT0,
GL_QUADRATIC_ATTENUATION, 1.0);
Aminación de la luz
z Isaac Rudomín
{ rudomin@itesm.mx
z Erik Millán
{ emillan@itesm.mx
z Ma.Elena Melón
{ mmelon@itesm.mx
12
Expositor y revisor:
13