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

Iluminação

Embed Size (px)

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

Citation preview

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;

}