70 likes | 157 Views
Tarefa : Implementar o Demo na página da disciplina . Para trabalhar com iluminação em OpenGL, deve -se definir : Vetores de iluminação : Ex: GLfloat luzAmbiente [4]={0.2,0.2,0.2,1.0}; 2) Tipos de iluminação : Ex: // Define os parâmetros da luz de número 0
E N D
Tarefa: Implementar o Demo napágina da disciplina. Para trabalhar com iluminaçãoem OpenGL, deve-se definir: Vetores de iluminação: Ex: GLfloatluzAmbiente[4]={0.2,0.2,0.2,1.0}; 2) Tipos de iluminação: Ex: // Define os parâmetros da luz de número 0 glLightfv(GL_LIGHT0, GL_AMBIENT, luzAmbiente);
3) Materiaisquevão ser usados: Exemplo: // Capacidade de brilho do material GLfloatespecularidade[4]={1.0,1.0,1.0,1.0}; GLintespecMaterial = 60; A seguirencontram-se algumasfunções de devem ser inseridas no códigoquepermitemtrabalhar com iluminação. Algumasestãoincompletasparaseremcompletadaspelosalunos.
// Função responsável pela especificação dos parâmetros de iluminação voidDefineIluminacao (void) { // definição da iluminação GLfloatluzAmbiente[4]={0.2,0.2,0.2,1.0}; GLfloatluzDifusa[4]={0.7,0.7,0.7,1.0}; // "cor" GLfloatluzEspecular[4]={1.0, 1.0, 1.0, 1.0};// "brilho" GLfloatposicaoLuz[4]={0.0, 50.0, 50.0, 1.0}; // Capacidade de brilho do material GLfloatespecularidade[4]={1.0,1.0,1.0,1.0}; GLintespecMaterial = 60; // Define a refletância do material glMaterialfv(GL_FRONT,GL_SPECULAR, especularidade); // Define a concentração do brilho glMateriali(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 0 glLightfv(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 usada para especificar a posição do observador virtual voidPosicionaObservador(void) { // Especifica sistema de coordenadas do modelo ..... // Inicializa sistema de coordenadas do modelo ..... DefineIluminacao(); // Posiciona e orienta o observador glTranslatef(-obsX,-obsY,-obsZ); glRotatef(rotX,1,0,0); glRotatef(rotY,0,1,0); }
// Função usada para especificar o volume de visualização voidEspecificaParametrosVisualizacao(void) { // Especifica sistema de coordenadas de projeção ....... // Inicializa sistema de coordenadas de projeção ....... // Especifica a projeçãperspectiva(angulo,aspecto,zMin,zMax) gluPerspective(angle,fAspect,0.5,500); PosicionaObservador(); }
// Função callback chamada quando o tamanho da janela é alterado voidAlteraTamanhoJanela(GLsizei w, GLsizei h) { // Para previnir uma divisão por zero if ( h == 0 ) h = 1; // Especifica as dimensões da viewport glViewport(0, 0, w, h); // Calcula a correção de aspecto fAspect = (GLfloat)w/(GLfloat)h; EspecificaParametrosVisualizacao(); }
// Função responsável por inicializar parâmetros e variáveis void Inicializa (void) { // Define a cor de fundo da janela de visualização como branca glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // Habilita a definição da cor do material a partir da cor corrente glEnable(GL_COLOR_MATERIAL); //Habilita o uso de iluminação glEnable(GL_LIGHTING); // Habilita a luz de número 0 glEnable(GL_LIGHT0); // Habilita o depth-buffering glEnable(GL_DEPTH_TEST); // Habilita o modelo de colorização de Gouraud glShadeModel(GL_SMOOTH); // Inicializa a variável que especifica o ângulo da projeção // perspectiva angle=45; // Inicializa as variáveis usadas para alterar a posição do // observador virtual rotX = 0; rotY = 0; obsX = obsY = 0; obsZ = 150; }