33
Computação Gráfica Conf. 6: Iluminação e materiais. ISUTIC - 2016 Eng. Alexander Rodríguez Bonet

Geometría Computacional: Introducción · 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

  • Upload
    lamtruc

  • View
    221

  • Download
    0

Embed Size (px)

Citation preview

Computação Gráfica Conf. 6: Iluminação e materiais.

ISUTIC - 2016

Eng. Alexander Rodríguez Bonet

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

Introdução

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.

Computação Gráfica Conf. 6: Iluminação e materiales.

ISUTIC - 2016

Eng. Alexander Rodríguez Bonet