iluminação

13
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

Upload: lucas-craig

Post on 03-Jan-2016

37 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: Iluminação

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

Page 2: Iluminação

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

Page 3: Iluminação

// 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);

Page 4: Iluminação

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 ….

Page 5: Iluminação

// 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 );

}

Page 6: Iluminação

// 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();

}

Page 7: Iluminação

// 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);

}

Page 8: Iluminação

// 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();}

Page 9: Iluminação

// 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);

}

Page 10: Iluminação

// 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();

}

Page 11: Iluminação

// 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();}

Page 12: Iluminação

// 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;

}

Page 13: Iluminação

// 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;

}