Upload
internet
View
109
Download
2
Embed Size (px)
Citation preview
Iluminação e Sombreamento
Guilherme Amaral [email protected]
Iluminação e Sombreamento Natureza da Luz Emissores
◦ Fontes de luz◦ Refletores
Sombreamento
Guilherme Amaral [email protected]
Um modelo de iluminação em CG define a natureza da luz emanada por uma fonte e sua interação com todos os objetos em cena
Sombreamento está diretamente ligado a manipulação da luz dentro de um modelo de CG
Guilherme Amaral [email protected]
Ondas eletromagnéticas capazes de serem captadas pela visão humana
Guilherme Amaral [email protected]
VermelhoLaranjaAmareloVerdeAzulAnilVioleta
Conceitos importantes◦ A luz é uma energia eletromagnética◦ A intensidade de uma luz emitida diminui em
relação inversa ao quadrado da distância da fonte de luz
◦ Energia não se perde, se transforma Absorção da luz branca por uma superfície preta Calor: outra forma de energia com diferente
comprimento de onda
Guilherme Amaral [email protected]
Quanto a emissão de luz os objetos podem ser classificados como:◦ Fontes de luz própria
Lâmpadas, lanternas, fogo, sol, etc. Caracterizadas pela intensidade, freqüência e
direção◦ Refletores
Objetos coloridos Propriedades de sua superfície
Guilherme Amaral [email protected]
Classificadas em:◦ Ambiental◦ Direcional◦ Pontual◦ Spot
Guilherme Amaral [email protected]
Ambiental◦ Ilumina igualmente todas as superfícies do
ambiente◦ Posição da câmera não é importante
Guilherme Amaral [email protected]
Fonte Direcional◦ Raios paralelos e com mesma intensidade◦ Simula os raios solares
Guilherme Amaral [email protected]
Fonte Pontual◦ Emite luz em todas as direções◦ Atinge os objetos com diferentes direções e
intensidades
Guilherme Amaral [email protected]
Fonte Spot◦ Emite luz em forma de um cone a partir de um ponto◦ A intensidade cai a medida que se distancia da fonte
Guilherme Amaral [email protected]
Objetos Refletores◦ Difusos◦ Especulares
Guilherme Amaral [email protected]
Refletor Difuso◦ A luz é refletida em diferentes direções◦ Reflexão em objeto com saliências ou foscos◦ Objetos foscos apresentam reflexão quase Lambertiana
Guilherme Amaral [email protected]
Refletor Especular◦ O ângulo de reflexão é igual ao de incidência◦ Superfícies polidas, lustradas ou brilhantes ◦ Gera brilho com a cor da luz, não com a do objeto
Guilherme Amaral [email protected]
Guilherme Amaral [email protected]
Simula o efeito de diferentes intensidades de iluminação sobre um objeto
Também conhecido como tonalização Utiliza as características das fontes de luz e
dos objetos para o cálculo da tonalização Inviabilidade da modelagem de todos os
conceitos físicos envolvidos
Guilherme Amaral [email protected]
Sombreamento Constante(Flat)◦ O cálculo da reflexão da luz é feito apenas uma
vez por superfície◦ Solução mais simples e rápida◦ Resulta em uma aparência facetada
Guilherme Amaral [email protected]
Sombreamento de Gouraud◦ O cálculo da reflexão da luz é feita em cada vértice e
cada face é resultado do gradiente entre os vértices◦ Interpolação bi-linear para cálculo dos demais pontos◦ Sombreamento mais suave, mais demorada
Guilherme Amaral [email protected]
Sombreamento de Phong◦ Adiciona o cálculo dos vetores especulares ao
modelo de Gouraud◦ Produz efeitos mais realistas e é ainda mais
demorado
Guilherme Amaral [email protected]
Fornece suporte para até 8 fontes de luz Implementa os modelos de tonalização Flat e Gouraud◦ glShadeModel(GLenum mode);
GL_FLAT GL_SMOOTH
A luz é dividida em quatro componentes que juntas formam o modelo de iluminação◦ Ambiente – luz que vem de todas as direções◦ Difusa – luz direcional que é ao atingir uma superfície é
refletida em todas as direções◦ Especular - luz direcional que é ao atingir uma superfície
tende a refletir em uma única outra direção◦ Emissiva – simula a luz que se origina em um objeto
Não é interfirida nem interfere no modelo de iluminação
Guilherme Amaral [email protected]
A iluminação é resultado das propriedades especificadas para as fontes de luz e das propriedades dos materiais que constituem os objetos◦ Fontes de Luz
void glLightfv(GLenum light, GLenum pname, TYPE *param);
◦ Objetos void glMaterialfv(GLenum face, GLenum pname,
TYPE *param);
Guilherme Amaral [email protected]
void glLightfv(GLenum light, GLenum pname, TYPE *param); ligth – fonte de luz desejada. GL_LIGHT0 a GL_LIGHT7 pname – característica da luz a ser especificada
param – vetor Glfloat com os valor a ser especificado
Guilherme Amaral [email protected]
Constante Valor default Significado
GL_AMBIENT (0.0,0.0,0.0,1.0) Cor ambiente da luz
GL_DIFFUSE (1.0,1.0,1.0,1.0) Cor difusa da luz
GL_SPECULAR (1.0,1.0,1.0,1.0) Cor especular da luz
GL_POSITION (0.0,0.0,1.0,0.0) Posição da luz
GL_SPOT_DIRECTION (0.0,0.0,-1.0) Direção da luz spot
GL_SPOTCUTOFF 180.0 Ângulo de corta da luz spot
Guilherme Amaral [email protected]
void glMaterialfv(GLenum face, GLenum pname, TYPE *param); face – quais faces do objeto estão sendo especificadas.
GL_FRONT, GL_BACK ou GL_FRONT_AND_BACK pname – propriedade do material a ser especificada
param – vetor Glfloat com os valor a ser especificado
Constante Valor default Significado
GL_AMBIENT (0.2,0.2,0.2,1.0) Cor ambiente do material
GL_DIFFUSE (0.8,0.8,0.8,1.0) Cor difusa do material
GL_SPECULAR_AND_DIFFUSE
Cor ambiente e especular do material
GL_SPECULAR (0.0,0.0,0.0,1.0) Cor especular do material
GL_SHININESS 0.0 Expoente especular
GL_EMISSION (0.0,0.0,0.0,1.0) Cor emissiva do material
void Inicializa (void){
// Habilita a definição da cor do material a partir da cor correnteglEnable(GL_COLOR_MATERIAL);//Habilita o uso de iluminaçãoglEnable(GL_LIGHTING); // Habilita a luz de número 0glEnable(GL_LIGHT0);// Habilita o depth-bufferingglEnable(GL_DEPTH_TEST);
// Habilita o modelo de colorização de GouraudglShadeModel(GL_SMOOTH);...
}
Guilherme Amaral [email protected]
void DefineIluminacao (void){
GLfloat luzAmbiente[4]={0.2,0.2,0.2,1.0}; GLfloat luzDifusa[4]={0.7,0.7,0.7,1.0}; // "cor" GLfloat luzEspecular[4]={1.0, 1.0, 1.0, 1.0};// "brilho" GLfloat posicaoLuz[4]={0.0, 50.0, 50.0, 1.0};
// Capacidade de brilho do materialGLfloat especularidade[4]={1.0,1.0,1.0,1.0};
‘ GLint especMaterial = 60;
Guilherme Amaral [email protected]
// Define a refletância do material glMaterialfv(GL_FRONT,GL_SPECULAR, especularidade);// Define a concentração do brilhoglMateriali(GL_FRONT,GL_SHININESS,especMaterial);
// Ativa o uso da luz ambiente glLightModelfv(GL_LIGHT_MODEL_AMBIENT, luzAmbiente);
// Define os parâmetros da luz de número 0glLightfv(GL_LIGHT0, GL_AMBIENT, luzAmbiente); glLightfv(GL_LIGHT0, GL_DIFFUSE, luzDifusa );glLightfv(GL_LIGHT0, GL_SPECULAR, luzEspecular );glLightfv(GL_LIGHT0, GL_POSITION, posicaoLuz );
}
Guilherme Amaral [email protected]
void Desenha(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
DefineIluminacao();
glColor3f(0.0f, 1.0f, 0.0f);
glutSolidSphere(50,20,20);
glFlush();}
Guilherme Amaral [email protected]
Guilherme Amaral [email protected]