Como activar las fuentes de luz en OPEN GL
El   cálculo del color se realiza en cada vértice según las   luces que haya encendidas y las propiedades del material de dicho vértice,   no tiene en cuenta posibles oclusiones de terceros objetos que producirían   sombras, reflejos de la luz que permitiría tener espejos o refracciones   de la luz para ver a traves de materiales como el agua.
Luces
Para   habilitar el modo de iluminación se realiza con la función glEnable(GL_LIGHTING),   cuando renderizamos en este modo la instrucción glColor   no tienen ninguna   influencia ya que el color resultante de cada vértice es calculado a   partir de los materiales del vértice y las luces que haya encendidas.
Disponemos   de ocho luces que podemos encender o apagar con la función glEnable(GL_LIGHTi)   donde i =[0..7].   Cada luz la podemos configurar estableciendo los siguientes parámetros   con la función glLight{if}v    :
| Parametro | Valor por defecto | Significado | 
| GL_AMBIENT | (0.0, 0.0, 0.0, 1.0) | intensidad ambiente de la luz | 
| GL_DIFFUSE | (1.0, 1.0, 1.0, 1.0)       GL_LIGTH0 (0.0, 0.0, 0.0, 1.0) GL_LIGTH1-GL_LIGHT7 | intensidad difusa de la luz | 
| GL_SPECULAR | (1.0, 1.0, 1.0, 1.0)       GL_LIGTH0 (0.0, 0.0, 0.0, 1.0) GL_LIGTH1-GL_LIGHT7 | intensidad especular de la luz | 
| GL_POSITION | (0.0, 0.0, 0.0, 1.0) | (x, y, z, w) posición de la luz | 
| GL_SPOT_DIRECTION | (0.0, 0.0, -1.0) | (x, y, z) dirección de la luz | 
| GL_SPOT_EXPONENT | 0.0 | exponente del foco | 
| GL_SPOT_CUTOFF | 180.0 | angulo de abertura del foco | 
| GL_CONSTANT_ATTENUATION | 1.0 | factor de atenuación constante | 
| GL_LINEAR_ATTENUATION | 0.0 | factor de atenuación lineal | 
| GL_QUADRATIC_ATTENUATION | 0.0 | factor de atenuación cuadratico | 
Como Calcular la normal para cada vertice en opengl ?
Normales
Una   de las características que se puede establecer de un vértice es   el color (o el material si estamos en modo iluminacion), pero podemos establecer   otras características como la coordenada de la textura o la normal que   sirve para realizar los calculos de la iluminación resultante. No importa   el orden en que se definan las características pero siempre se hará   antes de definir el vértice.
glColor3f(1.0,   0.3, 0.4); // Color del vértice 
glNormal3f(1.0, 0.0, 0.0); // Normal del vértice
glTexCoord2f(0.0, 1.0); // Coordenada de la textura
glVertex3f(1.0, 3.2, 3.6); // Vértice
glNormal3f(1.0, 0.0, 0.0); // Normal del vértice
glTexCoord2f(0.0, 1.0); // Coordenada de la textura
glVertex3f(1.0, 3.2, 3.6); // Vértice
1) Luz en un punto fijo de la escena
GLfloat lightPos[4] = {1.0, 4.0, 7.5, 1.0}; // Luz direccionalvoid Display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(posx, posy, posz, eyex, eyey, eyez, upx, upy, upz);
glPushMatrix();
// Aqui podriamos aplicar alguna transformación para mover la luzglPopMatrix();
glLightfv(GL_LIGHT0, GL_LIGHT_POSITION, lightPos);
// Aqui dibujamos la luz
glPushAttrib(GL_LIGHTING_BIT); // Guardamos el estado de las luces
glDisable(GL_LIGHTING); // Deshabilitamos las luces
glutSolidSphere(1.0, 25, 25); // Dibujamos la luz para que sepamos donde esta
glPopAttrib(GL_LIGHTING_BIT); // Restauramos el estado de las luces
// Dibujamos la escenaglTranslatef(0.0, 0.0, -5.0);
glutTeaPot(1.0);
glutSwapBuffers();
}
GLfloat lightPos[4] = {1.0, 4.0, 7.5, 1.0}; // Luz direccionalvoid Display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();
glPushMatrix();
// Aqui podriamos aplicar alguna transformación para mover la luzglPopMatrix();
glLightfv(GL_LIGHT0, GL_LIGHT_POSITION, lightPos);
// Aqui dibujamos la luz
glPushAttrib(GL_LIGHTING_BIT); // Guardamos el estado de las luces
glDisable(GL_LIGHTING); // Deshabilitamos las luces
glutSolidSphere(1.0, 25, 25); // Dibujamos la luz para que sepamos donde esta
glPopAttrib(GL_LIGHTING_BIT); // Restauramos el estado de las luces
gluLookAt(posx, posy, posz, eyex, eyey, eyez, upx, upy, upz);// Dibujamos la escenaglTranslatef(0.0, 0.0, -5.0);
glutTeaPot(1.0);
glutSwapBuffers();
} 3) Poligono
glBegin(GL_POLYGON);glColor3f(1.0f,1.0f,1.0f);glVertex3f(-10,15,0);glColor3f(0.0f,0.0f,0.0f);glVertex3f(10,5,0);glColor3f(1.0f,0.0f,0.0f);glVertex3f(10,-5,0);glColor3f(0.0f,1.0f,0.0f);glVertex3f(0,-10,0);glColor3f(0.0f,0.0f,1.0f);glVertex3fglEnd();Producirá una imagen como esta:

 
No hay comentarios:
Publicar un comentario