Computação Gráfica
description
Transcript of Computação Gráfica
António Ramires Fernandes + Luís Paulo Santos - Computação Gráfica 08/09António Ramires Fernandes + Luís Paulo Santos - Computação Gráfica 08/09
Computação Gráfica
Iluminação e Texturas
DI-UM Computação Gráfica 07/08 2
Iluminação
• Para que o OpenGL ilumine a cena é necessário:– Na fase de setup:
1. Indicar o modelo de shading: FLAT ou SMOOTH
2. Indicar as características das fontes de luz
3. Activar a iluminação
– Na fase de rendering:
1. Especificar os materiais dos objectos
2. Indicar as normais dos modelos
Modelo de Shading
• glShadeModel (opção)
• Opção = GL_FLAT ou GL_SMOOTH
DI-UM Computação Gráfica 07/08 3
Fonte de Luz
• Uma fonte de luz direccional é especificada indicando o vector direcção:
float l_dir={0., 1., 0., 0.}; // w=0. -> vector
glLightfv (GL_LIGHT0, GL_POSITION, l_dir);
• A intensidade difusa é especificada:float l_diff={1., 1., 1.};
glLightfv (GL_LIGHT0, GL_DIFFUSE, l_dir);
• A luz ambiente presente na cena:float amb={0.2, 0.2, 0.2};
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
DI-UM Computação Gráfica 07/08 4
Activar iluminação
• glEnable (GL_LIGHT0);• glEnalble (GL_LIGHTING);
DI-UM Computação Gráfica 07/08 5
Especificar os materiais
• Antes de desenhar cada objecto indicar ao OpenGL que se devem usar as propriedades dos materiais dos objectos.
– Para a componente de reflexão difusa:glColorMaterial(GL_FRONT, GL_DIFFUSE);– Usar a cor do objecto:glEnable(GL_COLOR_MATERIAL);
DI-UM Computação Gráfica 07/08 6
Normais
• Ao especificar cada vértice especifica-se a normal:
glNormal3f (Nx, Ny, Nz);
glVertex3f (Vx, Vy, Vz);
• No caso do terreno a função terrainLoadFromImage (char *fname, int normals)calcula as normais para cada vértice se normals!=0
• A função terrainCreateDL() encarrega-se de especificar as normais se estas tiverem sido previamente calculadas
DI-UM Computação Gráfica 07/08 7
DI-UM Computação Gráfica 07/08 8
Exercício
• Adapte a aplicação desenvolvida nas sessões anteriores para que:
– Use uma fonte de luz direccional
– Permita aumentar/diminuir a componente ambiente pressionando as teclas ‘A’/’a’
Transformações das texturas
As texturas podem ser transformadas tal como a geometria. Para especificar transformações a aplicar a texturas usar:
glMatrixMode(GL_TEXTURE);
As transformações especificadas a seguir aplicar-se-ão às texturas.
DI-UM Computação Gráfica 07/08 9
Transformações das texturas
• Por exemplo, para rodar uma textura mapeada num polígono de um ângulo dependente da frame actual (contada usando a variável step) usar:
glMatrixMode(GL_TEXTURE);
glPushMatrix();
glRotatef(step/100.,0.,0.,1.);
glMatrixMode(GL_MODELVIEW);
• Após o desenho do polígono fazer o reset à matriz:glMatrixMode(GL_TEXTURE);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
DI-UM Computação Gráfica 07/08 10
Exercício
• Adapte a aplicação desenvolvida nas sessões anteriores para que:
– Desenhe um polígono horizontal (plano XZ) com uma textura representando água mapeada (ficheiro water.tga)
– A coordenada YY deste polígono varie entre 0 e 100 usando as teclas ‘w’/‘W’
– Esta textura sofra uma rotação de frame para frame simulando água
DI-UM Computação Gráfica 07/08 11