Upload
vunhu
View
214
Download
0
Embed Size (px)
Citation preview
Computação Gráfica IComputação Gráfica I
CRAb – Grupo de Computação Gráfica
Departamento de ComputaçãoUFC
Objetivos
• Estudar – equipamentos, técnicas de programação e conceitos matemáticos
• Para
2
• Para– representação, manipulação e projeção de objetos bi- e tridimensionais– aplicar a problemas específicos
Sumário do Curso
• Sistemas Gráficos e Modelos• Programação Gráfica• Input e Interação• Objetos Geométricos e Transformações
3
• Objetos Geométricos e Transformações• Visualização• Pintura• Técnicas Discretas• Implementação de um Renderizador
6.1 Luz e Matéria
• Superfície pode ser
– Emissora de luz
• Superfície de uma lâmpada
5
– Refletora de luz
– Emissora e refletora de luz
• Ferro em brasa
6.1 Luz e Matéria
• Equação de renderização
– i(p, p’): intensidade sai de p’ chega a p
+= ∫
"
")",'()",',()',()',()',(
P
PpppppppppppS
dSii ρευ
7
– i(p, p’): intensidade sai de p’ chega a p• εεεε(p,p’): parte emitida diretamente por p’• i(p’, p”): intensidade de p” chegando a p’• ρρρρ(p, p’, p”): função de reflexão de p’
– νννν(p, p’): função de oclusão• = 0 se objeto opaco estiver no caminho• = 1/r2 fator de atenuação da distância
6.1 Luz e Matéria
• Classificação da interação luz/material– Superfícies especulares
– Superfícies difusas
8
– Superfícies difusas
– Superfícies translúcidas
6.2 Fonte Luminosa (A25)
6.2.0 Introdução– Função de iluminação: I(x, y, z, θθθθ, φφφφ, λλλλ)• x, y, z: posição da fonte• (θθθθ, φφφφ): direção de emissão
9
• λλλλ : comprimento de onda emitido
– Contribuição total da fonte para iluminação da superfície
6.2 Fonte Luminosa (A25)
– Tipos de fontes
• Luz ambiente
• Luz pontual
10
• Luz spot
• Luz distante
6.2 Fonte Luminosa (A25)
6.2.1 Fontes de cores– Modelo do sistema visual humano• Modelo tricromático (R, G, B)
– Utilizar a função de luminância
11
– Utilizar a função de luminância
=
b
g
r
I
I
I
I
6.2 Fonte Luminosa (A25)
6.2.2 Luz ambiente– Representa a iluminação uniforme do
ambiente • Cozinhas, salas de aula, dias nublados
12
– Utilizar a intensidade
=
ab
ag
ar
a
I
I
I
I
6.2 Fonte Luminosa
6.2.3 Fonte pontual– Emite luz uniformemente em todas as
direções– Tem Intensidade e localização
13
– Tem Intensidade e localização
( )( )( )( )
( )02
0
0
0
0
0
0
1),(
I
I
I
pIpp
ppi
p
p
p
pI
−=
=
b
g
r
6.2 Fonte Luminosa
6.2.3 Fonte pontual ...– Gera sombras duras– Fonte de tamanho finito gera regiões de
penumbra e umbra
14
penumbra e umbra
6.2 Fonte Luminosa
6.2.3 Fonte pontual ...– Atenuar efeito de iluminação com a
distância• Utilizar fator
15
1/(a + b*d + c*d2)
6.2 Fonte Luminosa (A25)
6.2.4 Spotlights– Uniforme: Não há diferença de
intensidade na área iluminada• Exceto pela distância do ponto iluminado à
fonte (d1 e d2)
16
fonte (d1 e d2)
6.2 Fonte Luminosa
6.2.4 Spotlights– Não-uniforme: Intensidade concentra na
direção l l l l e decai com o afastamento angular dessa direção• I = (cos φφφφ)e= (l l l l . s) e
17
φ
• I = (cos φφφφ)e= (l l l l . s) e
llll s
θ
6.2 Fonte Luminosa (A25)
6.2.5 Fontes luminosas distantes– Importa apenas a direção de iluminação e intensidade de iluminação
D( ) DI
18
D
( )( )( )( )
=
D
D
D
DI
b
g
r
I
I
I
6.3 O Modelo de Reflexão de Phong
6.3.0 Introdução– Modelo simplificado• Eficiência computacional• Bom realismo sob– Condições de iluminação variadas
19
– Condições de iluminação variadas– Materiais diferentes
• Usa 4 vetores unitários– n: normal à superfície– l: do ponto iluminado à fonte– r: reflexão de l (Euclides)– v: do ponto iluminado ao observador
6.3 O Modelo de Reflexão de Phong
• Suporta os 3 tipos de interação luz/material– Ambiente– Difusa– Especular
• Cada fonte i contém as 3 intensidades
20
• Cada fonte i contém as 3 intensidades
=
ibsigsirs
ibdigdird
ibaigaira
i
LLL
LLL
LLL
L
6.3 O Modelo de Reflexão de Phong
• As reflectividades do material j para cada um dos 3 tipos de interação– Representam quanto de uma dada componente é
refletida
jbajgajra RRR
21
=
jbsjgsjrs
jbdjgdjrd
jbajgajra
j
RRR
RRR
RRR
R
6.3 O Modelo de Reflexão de Phong
• Considerando o operador matricial @ tal que
– C = A @ B →→→→ Cij = Aij Bij (não há somatório)
– I = Ia + Id + Is = La@Ra + Ld@Rd + Ls@Rs
22
6.3 O Modelo de Reflexão de Phong
6.3.1 Reflexão ambiente– Ia = Ra La = ka La – 0 ≤≤≤≤ ka ≤≤≤≤ 1
– ka = (kar, kag, kab)
23
– ka = (kar, kag, kab)
kar= 1.0kag= 0.0kab= 0.0
Lar= 1.0Lag= 1.0Lab= 1.0
Iar= 1.0Iag= 0.0Iab= 0.0
6.3 O Modelo de Reflexão de Phong
6.3.2 Reflexão difusa– Superfícies Lambertianas
24
Superfície rugosa
6.3 O Modelo de Reflexão de Phong
– Lei de Lambert• Rd ∝∝∝∝ cos θθθθ
( ) ddd LnlkI
nl
⋅=
⋅=cosθ
25
( ) dd
d
cbaLnl
pqpq
kI ⋅
++=
2
00
q0
q0
p p
6.3 O Modelo de Reflexão de Phong
6.3.3 Reflexão especular– Intensidade na direção do observador• Decai quando φφφφ cresce:
Is = ks Ls (cos φφφφ)m
26
Is = ks Ls (r · v)m
r
v
l
φφφφ
6.3 O Modelo de Reflexão de Phong
6.3.4 Modelo completo
( ) ( )( ) aa
N
i
isisidid
ii
aia
fontes
cbaLkvrLknlLk
pqpqLkI @@@
1@
1
m
2+
⋅+⋅
+++= ∑
=
27
αααα = m
6.4 Cálculo dos Vetores
6.4.1 Vetores normais– Dada a equação do plano
unitário):( 1 onde
0...
dznynxn
DzCyBxA
zyx ==++
=+++
nn
28
222
222222222,,
unitário):( 1 onde
CBA
Dd
CBA
Cn
CBA
Bn
CBA
An
dznynxn
zyx
zyx
++−=
++=
++=
++=
==++ nn
6.4 Cálculo dos Vetores
– Dados 3 pontos em um plano
( ) ( )0201 ppppn −×−=
p2
n
29
p0
p2
p1
Observação: O vetor obtido precisa ser normalizado
6.4 Cálculo dos Vetores
– Dada a equação implícita da superfície
−
∂∂
∂
=−−+−+−=
∂∂
∂
=
)(2
0)()()(),,(0),,( 2222
c
ccc
xxfx
f
rzzyyxxzyxf
fx
f
zyxf
30
Observação: O vetor obtido pelo gradiente dafunção precisa ser normalizado
−
−
−
=
∂
∂∂
∂=∇=
∂
∂∂
∂=∇=
)(2
)(2
)(2
c
c
c
zz
yy
xx
z
f
y
ff
z
f
y
ff nn
Esfera em (xc,yc,zc)
6.4 Cálculo dos Vetores
– Dada a equação paramétrica da superfície
vufv
vuf
vufu
vuf
vuf
vuf
y
x
vu
y
x
y
x
x
∂∂
∂
=∂
∂∂
∂
=∂
⇒
=
=
pp
fp
),(
),(
e ,),(
),(
),(
),(
),(
31
vu
v
vufv
vuf
v
u
vufu
vuf
uvuf
vuf
z
y
z
y
z
y
z
y
∂
∂×
∂
∂=
∂
∂∂
∂=
∂
∂
∂
∂∂
∂=
∂
∂⇒
=
ppn
pp
),(
),( e ,
),(
),(
),(
),(
Observação: O vetor n precisa ser normalizado
6.4 Cálculo dos Vetores
– Equação paramétrica da esfera de r=1 centrada na origem• -ππππ/2 < u < ππππ/2• -ππππ < v < ππππ
z
yu
v
p
32
xv
( ) ( )( ) ( )
( )
( ) ( )( ) ( )
( )
( ) ( )( ) ( )
( ) ( )( ) ( )( ) ( )
( ) ( )( ) ( )
( )pnp
ppn
ppp
=⇒=
=
=∂
∂×
∂
∂=
−=∂
∂
−
−
=∂
∂⇒
=
=
)cos(coscos
cos
)cos(
cos
coscos
cos
0
cos
coscos
e ,
cos
coscoscos
cos
2
2
u
usen
vu
vsenu
u
uusen
vu
vsenu
vu
vsenu
vu
vu
vusen
vsenusen
uusen
vu
vsenu
z
y
x
normalizado
6.4 Cálculo dos Vetores
– Especificação de um vetor normal em OpenGL• GLfloat n[3];• glNormal3f(n[0], n[1], n[2]); // nx, ny, nzou
33
ou• glNormal3fv(n); // ponteiro para of vetor n
6.4 Cálculo dos Vetores
6.4.2 Ângulo de reflexão
l r
n(l . n)
2(l . n)
34
l r
(l . n)
( )( )( )( ) lnnlr
nnllr
−⋅=⇒
⇒⋅=+
2
2
7 multiplicações5 adições
6.4 Cálculo dos Vetores
6.4.3 Uso do vetor h (Halfway)– Usado em vez de r no cálculo da reflexão
especular
vlh
+=
n hψψψψ
35
vl
vlh
+
+=
3 multiplicações5 adições1 raiz quadrada3 divisões
l
n h
r
v
φφφφ
6.4 Cálculo dos Vetores
6.4.3 Uso do vetor h (Halfway)– Só vale a pena se a fonte estiver longe e o
observador estiver longe • h é o mesmo para todo ponto do cenário
36
• r não é o mesmo para todo ponto do cenário
– Se o observador estiver no mesmo plano que contém l e n: 2ψψψψ = φφφφ• Utilizando n·h em vez de r·v com o mesmo
expoente m produz um specular hilight menor• Modificar o expoente m para m’
6.4 Cálculo dos Vetores
6.4.4 Luz transmitida– Lei de Snell
vácuono luz da velocidade
sen
sen=
l
t
t
l
η
η
θ
θ
ln
θθθθl
37
– Obter t comot = a (-l) + b (-n)t = – a l – b n||t|| = 1
i meio no luz da velocidade
vácuono luz da velocidade=iη
-nt
θθθθt
a
b
Meio l
Meio t
6.4 Cálculo dos Vetores
( )
( )
ln
⋅−=⇒⋅=+⋅
==⇒⋅=⋅
22
coscos1cos
sen
sensen1sen
t
lttl
t
l
l
ttl
bba
aa
ηη
η
ηθθθ
η
η
θ
θθθ
38
( )
( )( )
( ) ( )( ) nlnlnlt
ln
⋅
−−⋅+−=
⋅
−=
−=
−=−=
2
2
2
2
222
-11
-11cos
cos-11sen1sen1cos
t
l
t
l
t
l
t
lt
l
t
ll
t
ltt
η
η
η
η
η
η
η
ηθ
θη
ηθ
η
ηθθ
6.5 Coloração de polígonos
6.5.0 Introdução– Três maneiras de atribuir cor ponto a
ponto • Flat shading
39
• Gouraud shading• Phong shading
– Exemplo: Colorir a malha poligonal
6.5 Coloração de polígonos
6.5.1 Coloração homogênea:Flat Shading– Modelo de Phong retorna mesma
intensidade para qualquer ponto• v=constante: observador no infinito
40
• l=constante: fonte de luz no infinito• n=constante: polígono plano
– No OpenGL• glShadeModel(GL_FLAT);
6.5 Coloração de polígonos
– Inibição lateral• Propriedade do sistema visual humano• Percebe pequenas diferenças em intensidade
luminosa• Bordas fictícias são criadas: Mach bands
41
• Bordas fictícias são criadas: Mach bands
6.5 Coloração de polígonos
6.5.2 Coloração por interpolação e de Gouraud– Intensidade calculada pelo modelo de
iluminação de Phong nos vértices do polígono
42
polígono– Depois de projetados os polígonos• Pontos interiores são coloridos por
interpolação das intensidades dos vértices
– No OpenGL• glShadeModel(GL_SMOOTH);
6.5 Coloração de polígonos
– Cálculo das normais em um vértice da malha
43
4321
4321
nnnn
nnnnn
+++
+++=
6.5 Coloração de polígonos
6.5.3 Coloração de Phong– Normais são calculadas nos vértices– Polígono é projetado– Normais nos pontos interiores são
44
– Normais nos pontos interiores são interpoladas a partir das normais nos vértices
– Intensidade é calculada ponto a ponto com as normais interpoladas
6.5 Coloração de polígonos
– Utilizar interpolação bilinear
45
( ) ( )( ) ( ) DC
BA
nnn
nnn
βββα
ααα
+−=
+−=
1,
1
6.6 Aproximação de uma esfera por subdivisão recursiva
• Processo recursivo– Construir tetraedro• Quatro faces triangulares ligando 4 vértices em uma superfície esférica
– Calcular ponto central de cada face
46
– Calcular ponto central de cada face– Normalizar pontos centrais• Pontos irão para a superfície esférica
– Criar três novos triângulos ligando vértices do triângulo ao seu ponto central
6.6 Aproximação de uma esfera por subdivisão recursiva
• Processo recursivoA A
47
Código Fonte Código Exec
B C B C
AB
BC
AC
6.7 Fontes Luminosas no OpenGL
• Tipos de fontes– Ambiente– Direcional (localizada no infinito)• (xd, yd, zd, 0)
– Pontual
49
– Pontual • Localizada em um ponto próximo: (xp,yp,zp,wp)• Irradia em todas as direções
– Spot• Localizad em um ponto próximo: (xs, ys, zs, ws)• Apontada em uma direção principal• Limitada lateralmente por um cone
6.7 Fontes Luminosas no OpenGL
• Número de fontes em um programa– Limitado em oito fontes• GL_LIGHT0• GL_LIGHT1
50
• GL_LIGHT2•…• GL_LIGHT7
6.7 Fontes Luminosas no OpenGL
• Definir uma fonte de luz (ex: luz 1)– Habilitar iluminação• glEnable(GL_LIGHTING);
– Especificar os valores das propriedades• GLfloat L1_ambiente[] ={0.3, 0.3, 0.3, 1.0};
51
• GLfloat L1_ambiente[] ={0.3, 0.3, 0.3, 1.0};• GLfloat L1_difusa[] ={1.0, 1.0, 1.0, 1.0};• GLfloat L1_especular[] ={1.0, 1.0, 1.0, 1.0};• GLfoat L1_posicao[] ={-2.0, 2.0, 1.0, 1.0};• GLfloat spot_dir [] ={-1.0, -1.0, 0.0};
– Utilizar os comandos do OpenGL para associar essas propriedades à GL_LIGHT1
glLightfv (GL_LIGHT1, GL_AMBIENT, L1_ambiente);glLightfv (GL_LIGHT1, GL_DIFFUSE, L1_difusa);glLightfv (GL_LIGHT1, GL_SPECULAR, L1_especular);
glLightfv (GL_LIGHT1, GL_POSITION, L1_posicao);
glLightf (GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1.5);
6.7 Fontes Luminosas no OpenGL
52
glLightf (GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1.5);glLightf (GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.5);glLightf (GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.2);glLightf (GL_LIGHT1, GL_SPOT_CUTOFF, 45.0);glLightfv (GL_LIGHT1, GL_SPOT_DIRECTION, spot_dir);glLightf (GL_LIGHT1, GL_SPOT_EXPONENT, 2.0);glEnable (GL_LIGHT1);
6.7 Fontes Luminosas no OpenGL
• Estabelecer um modelo de iluminação– Três componentes• Intensidade da iluminação ambiente global• Considerar o observador próximo ao cenário ou no infinito?
53
no infinito?• Cálculo da iluminação deve ser diferente para os dois lados de uma face?
– Usar o comando glLightModel*();
6.7 Fontes Luminosas no OpenGL
• Estabelecer um modelo de iluminação– Iluminação ambiente globalGLfloat luz_ambiente_global[]={0.2, 0.2, 0.2, 1.0);glLightModelfv(GL_LIGHT_MODEL_AMBIENT,
54
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, luz_ambiente_global);
– Observador local ou no infinitoglLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,
GL_TRUE);Default: GL_FALSE (Observador no infinito)
6.7 Fontes Luminosas no OpenGL
• Estabelecer um modelo de iluminação– Iluminação em dois ladosglLightModeli(GL_LIGHT_MODEL_TWO_SIDE,
GL_TRUE);
55
Default: GL_FALSE (Somente uma face é iluminada)
6.8 Especificação de Materiais/OpenGL
•Utilizar o comando glMaterial*()void glMaterial{if}[v](GLenum face,
GLenum pname, TYPE param);
face: GL_FRONT, GL_BACK, GL_FRONT_AND_BACK
56
[Default]
face: GL_FRONT, GL_BACK, GL_FRONT_AND_BACK
pname: GL_AMBIENT param: (0.2, 0.2, 0.2, 1.0)GL_DIFFUSE (0.8, 0.8, 0.8, 1.0)GL_AMBIENT_AND_DIFFUSEGL_SPECULAR (0.0, 0.0, 0.0, 1.0)GL_SHININESS 0.0GL_EMISSION (0.0, 0.0, 0.0, 1.0)GL_COLOR_INDEX (0, 1, 1)
6.8 Especificação de Materiais/OpenGL
•Definir as propriedades do material iglFloat ka_i[]={0.2, 0.2, 0.2, 1.0};glFloat kd_i[]={1.0, 0.8, 0.0, 1.0};glFloat ks_i[]={1.0, 1.0, 1.0, 1.0};
•Utilizar o comando glMaterial*()
57
•Utilizar o comando glMaterial*()glMaterialfv(GL_FRONT, GL_AMBIENT, ka_i);glMaterialfv(GL_FRONT, GL_DIFFUSE, kd_i);glMaterialfv(GL_FRONT, GL_SPECULAR, ks_i);glMaterialf (GL_FRONT, GL_SHININESS, 100.0);
6.8 Especificação de Materiais/OpenGL
•Para superfícies emissoras de luzglFloat emissao[]={0.0, 0.3, 0.3, 1.0};glMaterialfv(GL_FRONT, GL_EMISSION, emissao);
58
6.8 Especificação de Materiais/OpenGL
• Aspectos de programação– Toda mudança de material implica em um grande número de chamadas a glMaterial–Melhor escrever a seguinte função para trocar o material
59
trocar o materialvoid materials(materialStruct *materials){glMaterialfv(GL_FRONT, GL_AMBIENT, materials->ambient);glMaterialfv(GL_FRONT, GL_DIFFUSE, materials->diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR, materials->specular);glMaterialf (GL_FRONT, GL_SHININESS, materials->shininess);}
6.8 Especificação de Materiais/OpenGL
• Aspectos de programaçãotypedef struct{ GLfloat ambient[4];
GLfloat diffuse[4];
60
GLfloat specular[4];GLfloat shininess[4];
} materialStruct;
6.8 Especificação de Materiais/OpenGL
• Aspectos de programação– Bronze e OuromaterialStruct brassMaterial = { 0.33, 0.22, 0.03, 1.0,
0.78, 0.57, 0.11, 1.0,0.99, 0.94, 0.81, 1.0,
61
0.99, 0.94, 0.81, 1.0,27.89};
materialStruct goldMaterial = { 0.25, 0.20, 0.07, 1.0,0.75, 0.61, 0.23, 1.0,0.63, 0.56, 0.37, 1.0,51.2};
6.9 Coloração do Modelo da Esfera
• Habilitação de propriedades e testesglEnable (GL_LIGHTING);glEnable (GL_LIGHT0);glEnable (GL_DEPTH_TEST);glPolygonMode(GL_FRONT, GL_FILL);
62
glPolygonMode(GL_FRONT, GL_FILL);
• Atribuição do material ouro• Definição da fonte de luz• Desenho da esfera Código Fonte
Código Exec
6.10 Coloração Global
• Modelo de iluminação local– Colore-se cada objeto independentemente• Fonte de luz + objeto + observador
63
Iluminação local
Iluminação global
6.10 Coloração Global
• Modelo de iluminação global– Luz que chega ao olho do observador é oriunda de múltiplas reflexões e refrações– Ray-tracing: segue raio caminho inverso
64
– Ray-tracing: segue raio caminho inverso
6.10 Coloração Global
• Modelo de iluminação global– Radiosidade: balanço de energia no ambiente define a energia em cada superfície
65