110 likes | 210 Views
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 :
E N D
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: • Especificar os materiais dos objectos • Indicar as normais dos modelos DI-UM Computação Gráfica 07/08
Modelo de Shading • glShadeModel (opção) • Opção = GL_FLAT ou GL_SMOOTH DI-UM Computação Gráfica 07/08
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
Activar iluminação • glEnable (GL_LIGHT0); • glEnalble (GL_LIGHTING); DI-UM Computação Gráfica 07/08
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
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
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
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
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
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