iluminação
DESCRIPTION
Iluminação. Para programar um sistema de iluminação , dois passos principais devem ser considerados : c) Que tipo e posição de Iluminação se deseja b) Que tipo de Material será iluminado c) Definir que parâmetros deseja usar nas luzes. - PowerPoint PPT PresentationTRANSCRIPT
Iluminação
• Para programar um sistema de iluminação, dois passos principais devem ser considerados:
c) Que tipo e posição de Iluminação se deseja
b) Que tipo de Material será iluminado
c) Definir que parâmetros deseja usar nas luzes
Para definir o Tipo e posição de Iluminação
GLfloat luzAmbiente[4] = {0.2,0.2,0.2,1.0}; // como deseja uma luz ambiente
GLfloat luzDifusa[4] = {0.7,0.7,0.7,1.0}; // “como deseja uma luz difusa
GLfloat luzEspecular[4] = {1.0, 1.0, 1.0, 1.0}; // como deseja uma luz especular
GLfloat posicaoLuz[4] = {0.0, 50.0, 50.0, 1.0}; // posição da luz
// Capacidade de brilho do materialGLfloat especularidade[4] = {1.0,1.0,1.0,1.0}; Glint especMaterial = 60;
// Define a refletância do material glMaterialfv(GL_FRONT,GL_SPECULAR, especularidade);
// Define a concentração do brilhoglMateriali(GL_FRONT,GL_SHININESS,especMaterial);
Iluminação
// Função responsável pela especificação dos parâmetros de iluminaçãovoid DefineIluminacao (void){
GLfloat luzAmbiente[4]={0.2,0.2,0.2,1.0}; GLfloat luzDifusa[4]={0.7,0.7,0.7,1.0}; // "cor" GLfloat luzEspecular[4]={1.0, 1.0, 1.0, 1.0};// "brilho" GLfloat posicaoLuz[4]={0.0, 50.0, 50.0, 1.0};
// Capacidade de brilho do materialGLfloat especularidade[4]={1.0,1.0,1.0,1.0}; GLint especMaterial = 60;
Continua no outro slide ….
// Define a refletância do material glMaterialfv(GL_FRONT,GL_SPECULAR, especularidade);// Define a concentração do brilhoglMateriali(GL_FRONT,GL_SHININESS,especMaterial);
// Ativa o uso da luz ambiente glLightModelfv(GL_LIGHT_MODEL_AMBIENT, luzAmbiente);
// Define os parâmetros da luz de número 0glLightfv(GL_LIGHT0, GL_AMBIENT, luzAmbiente); glLightfv(GL_LIGHT0, GL_DIFFUSE, luzDifusa );glLightfv(GL_LIGHT0, GL_SPECULAR, luzEspecular );glLightfv(GL_LIGHT0, GL_POSITION, posicaoLuz );
}
// Função callback de redesenho da janela de visualização
void Desenha(void){ // Limpa a janela de visualização com a cor
// de fundo definida previamenteglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Chama a função que especifica os parâmetros de iluminaçãoDefineIluminacao();
// Altera a cor do desenho para azulglColor3f(0.0f, 0.0f, 1.0f);
// Função da GLUT para fazer o desenho de um "torus" // com a cor correnteglutSolidTorus(20.0, 35.0, 20, 40);
// Executa os comandos OpenGLglutSwapBuffers();
}
// Função usada para especificar a posição do observador virtual
void PosicionaObservador(void){
// Especifica sistema de coordenadas do modeloglMatrixMode(GL_MODELVIEW);
// Inicializa sistema de coordenadas do modeloglLoadIdentity();DefineIluminacao();
// Posiciona e orienta o observadorglTranslatef(-obsX,-obsY,-obsZ);glRotatef(rotX,1,0,0);glRotatef(rotY,0,1,0);
}
// Função usada para especificar o volume de visualização
void EspecificaParametrosVisualizacao(void){
// Especifica sistema de coordenadas de projeçãoglMatrixMode(GL_PROJECTION);
// Inicializa sistema de coordenadas de projeçãoglLoadIdentity();
// Especifica a projeção perspectiva(angulo,aspecto,zMin,zMax)gluPerspective(angle,fAspect,0.5,500);
PosicionaObservador();}
// Função callback chamada para gerenciar eventos de teclas normais (ESC)
void Teclado (unsigned char tecla, int x, int y){
if(tecla==27) // ESC ?exit(0);
}
// Função callback para tratar eventos de teclas especiaisvoid TeclasEspeciais (int tecla, int x, int y) {
switch (tecla){
case GLUT_KEY_HOME: if(angle>=10) angle -=5;break;
case GLUT_KEY_END: if(angle<=150) angle +=5;break;
}EspecificaParametrosVisualizacao();glutPostRedisplay();
}
// Função callback chamada quando o tamanho da janela é alterado void AlteraTamanhoJanela(GLsizei w, GLsizei h){
// Para previnir uma divisão por zeroif ( h == 0 ) h = 1;
// Especifica as dimensões da viewportglViewport(0, 0, w, h);
// Calcula a correção de aspectofAspect = (GLfloat)w/(GLfloat)h;
EspecificaParametrosVisualizacao();}
// Função responsável por inicializar parâmetros e variáveisvoid Inicializa (void){
// Define a cor de fundo da janela de visualização como brancaglClearColor(1.0f, 1.0f, 1.0f, 1.0f);
// Habilita a definição da cor do material a partir da cor correnteglEnable(GL_COLOR_MATERIAL);//Habilita o uso de iluminaçãoglEnable(GL_LIGHTING); // Habilita a luz de número 0glEnable(GL_LIGHT0);// Habilita o depth-bufferingglEnable(GL_DEPTH_TEST);
// Habilita o modelo de colorização de GouraudglShadeModel(GL_SMOOTH);
// Inicializa a variável que especifica o ângulo da projeção// perspectivaangle=45;
// Inicializa as variáveis usadas para alterar a posição do // observador virtualrotX = 0;rotY = 0;obsX = obsY = 0;obsZ = 150;
}
// Programa Principal int main(void){
// Define o modo de operação da GLUT// Especifica a posição inicial da janela GLUT// Especifica o tamanho inicial em pixels da janela GLUT // Cria a janela passando como argumento o título da mesma// Registra a função callback de redesenho da janela de visualização // Registra a função callback de redimensionamento da janela de visualização// Registra a função callback para tratamento das teclas normais // Registra a função callback para tratamento das teclas especiais// Registra a função callback para eventos de botões do mouse// Registra a função callback para eventos de movimento do mouse// Chama a função responsável por fazer as inicializações // Inicia o processamento e aguarda interações do usuárioglutMainLoop(); return 0;
}