View
223
Download
0
Category
Preview:
Citation preview
Aula de hoje
1. Cor.
2. Modelos de Iluminação.
3. Hachura poligonal.
4. Iluminação em OpenGL.
5. Vetores Normais.
6. Materiais.
Computação Gráfica
Objetivo
Identificar conceitos básicos
relacionados com a iluminação em
cenas tridimensionais.
Computação Gráfica
Computação Gráfica
Cor
Percepção da cor:
Fisicamente a luz esta decomposta em fotones.
O olho humano é sensível à radiação eletromagnética na
faixa de 400 a 700 nanometros, chamada espectro visível.
A cor de um objeto é determinada pela frequência da onda
que ele reflete.
Um objeto terá determinada cor se não absorver os
comprimentos de onda que correspondem àquela cor.
Considerando as cores como luz, a cor branca resulta da
sobreposição de todas as cores primárias (verde, azul e
vermelho).
Computação Gráfica
Cor
Simulação da cor pelo hardware:
O hardware faz que a cada pixel emita diferentes
quantidades de luz vermelha, verde e azul, (RGB), às
vezes com um quarto valor chamado alpha (RGBA).
Alpha se utiliza com frequência para combinar o valor
da cor do fragmento que se esta transformando com o
do pixel que já está alojar no framebuffer.
Computação Gráfica
Cor
Modelo de cores (RGB): É um modelo aditivo já que as intensidades somam-se
para produzir outras cores. Representa-se mediante um cubo unitário onde a cada um dos vetores de posição representa uma cor especifico.
glColor3f (1.0, 0.0, 0.0);
Computação Gráfica
Cor
Modo de Índice de cor: Aloja-se para a cada pixel. A cada índice de cor indica
uma entrada numa tabela que define um conjunto particular de R, G, B.
A quantidade de cores do mapa define-o o hardware utilizado.
Computação Gráfica
Cor
Dithering: Alguns hardwares gráficos utilizam esta técnica para
aumentar o espectro de cores. Suponha que seu sistema só pode mostrar oito cores:
negro, branco, vermelho, azul, verde, amarelo, cian e
magenta. Para mostrar uma região de cor de rosa, o hardware pode
encher a região em forma de um tabuleiro de ajedrez,
alternando a componente vermelha com a branca para a
cada pixel. Para habilitar ou desactivar Dithering passa o GL_DITHER
a glEnable() ou glDisable().
Computação Gráfica
Iluminação e material
Iluminação refere-se ao processo que permite averiguar a intensidade luminosa (cor) da cada um dos pontos de uma superfície, que se baseia na posição, orientação, características da superfície e nas características das fontes de luz que as alumiam.
Computação Gráfica
Modelos de Iluminação
Temos 3 componentes: A intensidade da luz global. A posição do observador. A forma de alumiar os polígonos.
Por defeito coloca-se ao observador no infinito e então a luz afecta da mesma maneira a todos os objetos, mas se o situamos em outra posição diferente (posição local) , a iluminação teria que variar.
Computação Gráfica
Características dos Modelos de Iluminação A iluminação consegue-se mediante a criação de
uma ou mais fontes de luz.
A luz interactúa sobre os objetos segundo as
propriedades dos materiais de que estejam
constituídos, pelo que se pode diferenciar os
materiais segundo a aparência do objeto.
Os objetos que não emitem sua própria luz,
recebem três tipos de luz diferentes: luz
ambiental, luz difusa e luz especular.
Computação Gráfica
Luz Ambiental
Não provem de uma direcção concreta, incide sobre todas as partes do objeto por igual.Luz ambiente = (Coeficiente de reflexão ambiental do objeto) * (intensidade ambiental em todo o ponto do espaço). Os objetos não refletem e são auto – luminosos.
Computação Gráfica
Luz Difusa
A luz difusa é a que provem de uma direcção particular e é refletida em todas direcções. É refletida pela superfície de um objeto de maneira adireccional. (igual intensidade em qualquer direcção). A componente difusa da luz refletida por uma superfície é proporcional ao cosseno do ângulo de incidência.A luz refletida num ponto é independente da posição do observador.
Computação Gráfica
Luz Difusa
O brilho depende unicamente do ângulo entre a
direcção dos vetores L e N.
Com a combinação da luz ambiental e difusa
obtêm-se efeitos como mostra-se a seguir:
Computação Gráfica
Luz Especular É a componente da luz refletida sobre uma
superfície brilhante ou polida numa direcção preferente formando um brilho.
A reflexão especular depende da posição do observador.
Computação Gráfica
Hachura Poligonal
Utiliza os cálculos de intensidade achados por
um modelo de iluminação para determinar a
intensidade da luz em todas as posições de pixel
que se projectam nas diversas superfícies de
uma cena.
Intensidade constante por polígono, interpolação
de intensidades ou de normais ao longo das
superfícies em dependência da hachura aplicada.
Computação Gráfica
Hachura FLAT
Aplica uma cor uniforme à cada polígono.
As linhas representam as normais da cada cara
do cubo, pelo que a cara completa é pintada da
mesma cor.
Costuma-se aplicar quando:
Luz no infinito.
Observador no infinito.
Computação Gráfica
Hachura SMOOTH ou Gouraud
Calcula-se as intensidades nos vértices, se
interpolan as mesmas entre os vértices e
finalmente representa-se o polígono.
Vantagens: Melhora na representação
de superfícies curvas.
Desvantagens:
Más reflexões especulares.
Computação Gráfica
Iluminação em OpenGL
Para eleger o método de hachura plana, OpenGL
usa a função glShadeModel com o parâmetro
GL_FLAT.
Para eleger o método de sombreado Gouraud,
OpenGL usa a função glShadeModel com o
parâmetro GL_SMOOTH.
O programador é o encarregado de interpolar as
normais e associá-las a todos os pontos.
Computação Gráfica
Iluminação em OpenGL
Podem-se ter até 8 luzes ativas simultaneamente.
As luzes possuem nome próprio, e será do tipo:
GL_LIGHT0, GL_LIGHT1, GL_LIGHT2…
gl.glEnable(GL.GL_LIGHT2);
gl.glDisable(GL.GL_LIGHT2);
Para ligar / desligar toda a iluminação dentro de
uma cena utiliza-se:
gl.glEnable(GL.GL_LIGHTING)
gl.glDisable(GL.GL_LIGHTING);
Computação Gráfica
Iluminação em OpenGL
Em OpenGL existem três tipos fundamentais de luzes: luzes direcionais, luzes locais e focos.
Permitem definir uma componente ambiente, uma difusa e uma especular com componentes RGBA.
As luzes definem-se fazendo uso da seguinte função:
void glLightfv (GLenum light, GLenum pname,
const GLfloat *params);
Exemplo:
glLightfv(GL_LIGHT0,GL_AMBIENT,luz_amb);
Computação Gráfica
Iluminação em OpenGL
Luzes direcionais As fontes de luz direcionais definem-se no infinito
e para criá-las é necessário definir seu vetor direcional:
Exemplo:float difusa[3]={1.0,0.0,0.0};
//direção ou posição
float direção[4]={1.0,1.0,1.0,0.0};
glLightfv (GL_LIGHT0, GL_POSITION, direção};
glLightfv (GL_LIGHT0, GL_DIFFUSE, difusa);
Computação Gráfica
Iluminação em OpenGL
Luzes locais As luzes locais definem-se numa posição da cena
e o quarto elemento do vetor vale um. Exemplo:float difusa[3]={1.0,0.0,0.0};
float posição[4]={1.0,1.0,1.0,1.0};
glLightfv (GL_LIGHT0, GL_POSITION, posição};
glLightfv (GL_LIGHT0, GL_DIFFUSE, difusa);
Computação Gráfica
Iluminação em OpenGLFocos de Luz Define-se com uma luz local, uma direcção e abertura do
foco. Exemplo:
float difusa[3]={1.0,0.0,0.0};
foat posição[4]={1.0,1.0,1.0,1.0};
float direção[3]={1.0,1.0,1.0};
gl.glLightfv (GL.GL_LIGHT0, GL.GL_POSITION, posição};
gl.glLightfv (GL.GL_LIGHT0, GL.GL_DIFFUSE, difusa);
//direção do foco
gl.glLightfv (GL.GL_LIGHT0, GL.GL_SPOT_DIRECTION, direção);
//ângulo de corte entre 0 e 180 graus
gl.glLightf (GL.GL_LIGHT0, GL.GL_SPOT_CUTOFF, 20);
Computação Gráfica
Iluminação em OpenGL
glEnable(GL_LIGHTING); glShadeModel(GL_SMOOTH); Lfloat light_position1 [] = { 1.00, 1.00, 1.00, 1.00};glLightfv(GL_LIGHT0, GL_POSITION, light_position1);
GLfloat light_ambient [] = { 0.00, 0.00, 0.00, 1.00};GLfloat light_diffuse [] = { 1.00, 1.00, 1.00, 1.00};GLfloat light_specular [] = { 1.00, 1.00, 1.00, 1.00};glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glEnable(GL_LIGHT0);
Computação Gráfica
Materiais em OpenGL
O modelo de iluminação de OpenGL realiza uma
aproximação da cor de um material em função da
luz que incide sobre ele e a luz que é capaz de
refletir.
Computação Gráfica
Materiais em OpenGL
Propriedades dos Materiais.
Têm duas propriedades sobre suas cores, que
indicam como influi a cada uma das
propriedades de um raio de luz sobre ele.
(Ambient, Diffuse).
Também tem três propriedades sobre a
capacidade de emissão e reflexão de luz
(Specular, Shininess, Emission).
Computação Gráfica
Materiais em OpenGL
OpenGL oferece um conjunto de primitivas que utilizar-
se-ão para especificar diferentes parâmetros do material
na cada polígono e se aplicam mediante a função:
void glMaterial{if}{v} (GLenum face, GLenum pname, TYPE
*param)
Computação Gráfica
Materiais em OpenGL
Exemplofloat material_ambient1 [] = {1.0, 1.0, 0.0, 0.0};float material_diffuse1 [] = {0.58, 0.97, 0.0, 0.0};float material_specular1 [] = {1.0, 0.33, 0.0, 1.0};float material_emission1 [] = {0.28, 0.0, 0.0, 0.0};float material_shininess1 = 10;
glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT, material_ambient1);glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE, material_diffuse1);glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR, material_specular1);glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION, material_emission1);glMaterialfv(GL_FRONT_AND_BACK,GL_SHININESS, &material_shininess1);
Computação Gráfica
Conclusões:
• As propriedades e posicionamento da luz, bem como as características dos materiais que compõem os objetos, são importantíssimos para a realidade virtual em cenas 3D.
• OpenGL permite introduzir várias fontes de luz simultaneamente de três tipos diferentes numa cena.
• OpenGL possui várias funções que permitem simular a iluminação de cenas 3D.
Computação Gráfica
Tarefa
1. Adicionar luz ao projecto do Sistema Solar em
OpenGL.
2. Pesquisar como realizar o efeito neblina (fog)
em OpenGL.
Recommended