Desenho de objetos em OpenGL -- Computação Gráfica

jSSeção 5.4  

 

 

         5.4. Iluminação para Malhas Poligonais



O modelo de iluminação citado  pode ser aplicado em qualquer superfície ponto a ponto. No entanto, isso pode ser considerado uma tarefa lenta quando tratamos de computação gráfica interativa. Foi baseado nesse problema que surgiram simplificações, mesmo que para isso haja alguma perda de qualidade nos resultados.

 
ILUMINAÇÃO CONSTANTE


É o modelo mais simples de todas as simplificações bastando somente aplicar o modelo de iluminação em um único ponto e partir desse resultado utilizá-lo em todos outros pontos.

A utilização deste modelo não resulta em perda de qualidade para os casos abaixo:

  • As fontes de luz estão no infinito, portanto o ângulo entre a normal do polígono é a direção de cada fonte de luz é constante em todo polígono
  • O observador está no infinito
  • O polígono é uma representação fiel da superfície do objeto e não uma aproximação

Portanto não devemos utilizar iluminação constante quando estamos por exemplo, definindo uma esfera, pois ela é constituída de pequenos polígonos, e com este tipo de iluminação o celebro humano tende a destacar as variações de intensidade de luz existente em cada um desses polígonos.  

Para aplicar uma iluminação constante no seu modelo de iluminação em OpenGL, basta utilizar o comando :

    >> glShadeModel (GL_FLAT);

 

MÉTODO DE GOURAUD

Gouraud propôs um modelo mais realista que o de iluminação constante. Ao invés de calcular a cor em um apenas um ponto torna-se necessário o cálculo em vários pontos. Os pontos deveriam ser os vértices do polígono e as cores dos outros pontos deveriam ser obtidas através de uma interpolação.

Apesar de ser mais realístico que o método de iluminação constante, o método de Gouraud tem uma desvantagem. Ele não representa bem o caso em que a reflexão especular cria uma pequena região de brilho no interior do polígono.

Em OpenGL este método pode ser utilizado pelo comando:

    >> glShadeModel (GL_SMOOTH);

 

MÉTODO DE PHONG

Phong propôs um novo modelo no qual as normais são interpoladas ao invés das cores. Isso elimina uma série de problemas relacionados a perda de qualidade em termos de reflexão especular.

Apesar de obter resultados melhores, o método de Phong requer um aumento substancial no processamento necessário para a síntese de imagens, além disso implementações em hardware são bem mais caras, normalmente encontradas em equipamentos profissionais.

Em OpenGL não existe um comando que trata o método de Phong. Com ferramentas tipo Adobe 3D Max é possível aplicar o método de Phong, porém a mesma não é gratuita como a OpenGL. 

ESPECIFICANDO NORMAIS

Conforme dito na seção 5.2, você deve especificar as normais quando se trata de reflexão difusa e especular, pois o ângulo teta é calculado a partir da mesma. Basicamente existem algumas regras que devem ser seguidas para que não haja perda na qualidade da imagem:

  • Se o modelo de iluminação for somente luz ambiente, as normais não devem ser especificadas, pois este modelo não necessita de normal para realizar a iluminação.
  • Se o modelo de iluminação for difuso, especular ou ambos é necessário especificar as normais. Elas devem ser especificadas diferentemente para superfícies de representação fiel (cubos, pirâmides, paralelepípedos) e superfícies aproximadas (esferas, cones, cilindros). No primeiro caso, é necessário uma normal para cada face, independentemente do método de iluminação para malha poligonal utilizado. O segundo caso é um pouco mais complexo. Se você setar o método de iluminação constante em uma superfície aproximada, mesmo que especifique as normais corretamente, irá criar uma imagem pouco realística. Para se obter imagens de razoável qualidade é necessário utilizar o método de Gouraud ou Phong quando se utiliza superfícies aproximadas. Iremos especificar apenas o método de Gouraud, pois Phong não é suportado pelo OpenGL. Portanto caso esteja utilizando Gouraud em superfícies aproximadas, devem ser especificadas uma normal para cada vértice de cada polígono que forma a superfície. 

Em OpenGL as normais são definidas pelo comando:

    >> glNormalf ( nx, ny, nz);

Onde nx, ny, nz definem o vetor normal. Nos exemplos iremos mostrar onde declarar as normais e também como elas são utilizadas dentro do mesmo.

 

[principal]

[anterior]

[próxima]