Iluminacion En Opengl
Enviado por sirmakabro • 20 de Septiembre de 2011 • 483 Palabras (2 Páginas) • 1.130 Visitas
Iluminación en OpenGL
Introducción 3
Análisis 4
Código 5
Imágenes 13
Compilación y ejecución del programa. 13
Resultado. 13
Introducción
En el presente informe desarrollaremos la creación de un casa utilizando las funciones necesaria para darle luz a la casa obteniendo una diferencia de tonalidad al momento de girar la casa por un lado la casa se vera mas clara y por el otro lado se vera mas oscuro.
Análisis
Se analizaran las partes más importante del código, donde explicaremos el comportamiento de cada parte de él.
Para definir las variables utilizaremos la matriz generada por la función GLfloat de este modo podremos genera las luces para la casa.
//Colores
GLfloat color_amarillo [] = {1.0,1.0,0.0};
GLfloat color_rojo [] = {1.0,0.0,0.0};
GLfloat color_blanco [] = {1.0,1.0,1.0};
GLfloat color_piso [] = {0.25,0.69,0.32};
//El color difuso y especular de la luz:
GLfloat light_color [] = {1.0,1.0,1.0,1.0};
//El color ambiental de la luz (si algo está fuera de la luz, no es iluminado):
GLfloat ambiental [] = {0.0,0.0,0.0,1.0};
//valor de la direccion de la luz.
GLfloat direccion [] = {2.5,2.5,2.5,0.0};
Creamos una esfera que simulara el foco de luz el cual indica posición de donde proviene la luz.
//Esfera que da la referencia de foco de luz.
void foco(){
glPushMatrix();
glTranslatef(2.5,2.5,2.5);
glutSolidSphere(0.1f,50,50);
glPopMatrix();
}
Creamos la luz de un color. primero activamos la luz con glEnable, después utilizamos la función glLightfv para definir la luz ambiental como la luz del color amarillo y ademas de la dirección de la luz.
utilizamos la función glMaterialfv para definir el color del material donde se reflejara la luz.
void luzAmarilla(){
glEnable(GL_LIGHT0); //Activamos la Luz 0
glLightfv(GL_LIGHT0,GL_AMBIENT,ambiental);
glLightfv(GL_LIGHT0,GL_DIFFUSE,color_amarillo);
glLightfv(GL_LIGHT0,GL_SPECULAR,color_amarillo);//**
//Seleccionamos el color del material:
glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,color_amarillo);
//Establecemos la dirección de la luz:
glLightfv(GL_LIGHT0,GL_POSITION,direccion);
}
Código
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
float alpha, beta,i=0.0;//variables que capturan el angulo en el eje X e Y, para la rotacion.
int X1;
int Y1;//Variables que capturan el click del mouse.
GLint ancho=900;
GLint alto=700;
//Colores
GLfloat color_amarillo [] = {1.0,1.0,0.0};
GLfloat color_rojo [] = {1.0,0.0,0.0};
GLfloat color_blanco [] = {1.0,1.0,1.0};
GLfloat color_piso [] = {0.25,0.69,0.32};
//El color difuso y especular de la luz:
GLfloat light_color [] = {1.0,1.0,1.0,1.0};
//El color ambiental de la luz (si algo está fuera de la luz, no es iluminado):
GLfloat ambiental [] = {0.0,0.0,0.0,1.0};
//valor de la direccion de la luz.
GLfloat direccion [] = {2.5,2.5,2.5,0.0};
//Esfera que da la referencia de foco de luz.
void foco(){
glPushMatrix();
glTranslatef(2.5,2.5,2.5);
glutSolidSphere(0.1f,50,50);
glPopMatrix();
}
void vistas(int width, int height){
GLfloat aspecto;
glViewport(0,0,width,height);
aspecto = (GLfloat)ancho/(GLfloat)alto;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(35.0f,(GLfloat)width/(GLfloat)height,1.0f,20.0f);
gluLookAt(-10,3,5,0,0,0,0,1,0);
glMatrixMode(GL_MODELVIEW);
ancho=width;
alto=height;
}
void ejes(){
//eje coordenadas z
glBegin(GL_LINES);
glColor3f(1,0,0);//rojo
glVertex3f(0,0,0);
glVertex3f(0,0,3);
glEnd();
//eje coordenadas y
glBegin(GL_LINES);
glColor3f(0,1,0);//verde
glVertex3f(0,0,0);
glVertex3f(0,3,0);
glEnd();
//eje coordenadas x
glBegin(GL_LINES);
glColor3f(0,0,1);//azul
glVertex3f(0,0,0);
glVertex3f(3,0,0);
glEnd();
}
void piso(){
glBegin(GL_QUADS);
glColor3f(0.5,0.5,0.5);
glVertex3f(4,-1.5,4);
glVertex3f(4,-1.5,-4);
glVertex3f(-4,-1.5,-4);
glVertex3f(-4,-1.5,4);
glEnd();
}
void cubo_base(){
glColor3f(1.0,0,0);
glPushMatrix();
glScalef(1.5,1.0,1.0);
glTranslatef(0.0,-0.2,0.0);
glutSolidCube(2.5);
glPopMatrix();
//ladrillos frontal
while(i<1.8){
glPushMatrix();
glScalef(2.0,1.0,1.0);
glTranslatef(-0.85+i,-1.3,1.2);
glutSolidCube(0.2);
glPopMatrix();
i=i+0.243;
}
glPushMatrix();
glScalef(0.7,1.0,1.0);
glTranslatef(-2.62,-1.05,1.2);
glutSolidCube(0.2);
glPopMatrix();
glPushMatrix();
glScalef(0.9,1.0,1.0);
glTranslatef(2.0,-1.05,1.2);
glutSolidCube(0.2);
glPopMatrix();
i=0;
while(i<1.7){
glPushMatrix();
glScalef(2.0,1.0,1.0);
glTranslatef(-0.75+i,-1.05,1.2);
glutSolidCube(0.2);
glPopMatrix();
i=i+0.243;
}
i=0;
while(i<1.8){
glPushMatrix();
glScalef(2.0,1.0,1.0);
glTranslatef(-0.85+i,-0.8,1.2);
glutSolidCube(0.2);
glPopMatrix();
i=i+0.243;
}
//ladrillos back
i=0;
while(i<1.8){
glPushMatrix();
glScalef(2.0,1.0,1.0);
glTranslatef(-0.85+i,-1.3,-1.2);
glutSolidCube(0.2);
glPopMatrix();
i=i+0.243;
}
glPushMatrix();
glScalef(0.7,1.0,1.0);
glTranslatef(-2.62,-1.05,-1.2);
glutSolidCube(0.2);
glPopMatrix();
glPushMatrix();
glScalef(0.9,1.0,1.0);
...