Computação Gráfica

11
tónio Ramires Fernandes + Luís Paulo Santos - Computação Gráfica 08/ tónio Ramires Fernandes + Luís Paulo Santos - Computação Gráfica 08/ Computação Gráfica Iluminação e Texturas

description

Computação Gráfica. Iluminação e Texturas. Iluminação. Para que o OpenGL ilumine a cena é necessário: Na fase de setup: Indicar o modelo de shading : FLAT ou SMOOTH Indicar as características das fontes de luz Activar a iluminação Na fase de rendering : - PowerPoint PPT Presentation

Transcript of Computação Gráfica

Page 1: 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

Page 2: Computação Gráfica

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

Page 3: Computação Gráfica

Modelo de Shading

• glShadeModel (opção)

• Opção = GL_FLAT ou GL_SMOOTH

DI-UM Computação Gráfica 07/08 3

Page 4: Computação Gráfica

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

Page 5: Computação Gráfica

Activar iluminação

• glEnable (GL_LIGHT0);• glEnalble (GL_LIGHTING);

DI-UM Computação Gráfica 07/08 5

Page 6: Computação Gráfica

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

Page 7: Computação Gráfica

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

Page 8: Computação Gráfica

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’

Page 9: Computação Gráfica

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

Page 10: Computação Gráfica

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

Page 11: Computação Gráfica

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