Computação Gráfica
Iluminação e Texturas
António Ramires Fernandes + Luís Paulo Santos - Computação Gráfica 08/09
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
DI-UM Computação Gráfica 07/08
2
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
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’
DI-UM Computação Gráfica 07/08
8
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
Download

tp06 - HPC