computação gráfica i - mat.ufc.bresdras/ck090_2007/notasdeaula/capitulo04.pdf · subtração...
Post on 10-Dec-2018
215 Views
Preview:
TRANSCRIPT
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
Objetos Geométricos e TransformaçõesTransformações
4.1 Escalares, Pontos e Vetores
4.1.1 A visão geométrica– Ponto
• Não tem tamanho nem forma• Única propriedade é sua localização
– Escalares
5
– Escalares • Tensores de ordem zero (array de um
elemento) • Valor não muda com mudança de sistema
coordenadas• Obedecem conjunto de operações• Ex: massa de uma partícula
4.1 Escalares, Pontos e Vetores
4.1.1 A visão geométrica– Vetores
• Tensores de primeira ordem (arrayunidimensional com 31 componentes)
6
• Têm módulo, direção e sentido• Não têm posição fixa no espaço
4.1 Escalares, Pontos e Vetores
4.1.1 A visão geométrica– Vetores
BC -BC
7
C=0 Vetor nulo
A
B=-ABC
A
Adição vetorial
-BC
A
Subtração vetorial
4.1 Escalares, Pontos e Vetores
4.1.1 A visão geométrica– Adição Ponto-Vetor (Translação do Ponto)
P2
8
P2 =P1 + V
V
P1
4.1 Escalares, Pontos e Vetores
4.1.1 A visão geométrica– Subtração Ponto-Ponto
• Determinação do vetor entre os pontos
P2
9
V=P2 - P1
V
P1
4.1 Escalares, Pontos e Vetores
4.1.2 Geometria livre de coordenadas
(3, 3)
10
(1, 1) 2
2
4.1 Escalares, Pontos e Vetores
4.1.3 Visão matemática: Espaços vetoriais e Espaços afins
– Escalares, Pontos e Vetores são elementos
de conjuntos especiais
11
de conjuntos especiais
• Escalares ∈∈∈∈ Campos Escalares
• Vetores ∈∈∈∈ Espaços Vetoriais
• Pontos + Vetores ∈∈∈∈ Espaços Afins
4.1 Escalares, Pontos e Vetores
– Campo escalar, {S; +, .}• S: conjunto cujos elementos são escalares • Operações binárias: adição(+), multiplicação(.)• Propriedades
∀α∀α∀α∀α,ββββ ∈∈∈∈ S, αααα + ββββ ∈∈∈∈ S e αααα . ββββ ∈∈∈∈ S (Fechamento c.r.a. + e . )
12
αααα + ββββ = ββββ + αααα (Comutativa c.r.a. +)αααα . ββββ = ββββ . αααα (Comutativa c.r.a. . )αααα + (ββββ + γγγγ) = (αααα + ββββ) + γγγγ (Associativa c.r.a. +)αααα . (ββββ . γγγγ) = (αααα . ββββ) . γγγγ (Associativa c.r.a. . )αααα . (ββββ + γγγγ) = (αααα . ββββ) + (αααα . γγγγ) (Distributiva . c.r.a. +)αααα + 0 = 0 + αααα = αααα , ∀α∀α∀α∀α ∈∈∈∈ S (Elemento neutro da +)αααα . 1 = 1 . αααα = αααα , ∀α∀α∀α∀α ∈∈∈∈ S (Elemento neutro da . )αααα + (- αααα) = 0 , ∀α∀α∀α∀α ∈∈∈∈ S (Inverso aditivo)αααα . αααα-1 = 1 , ∀α∀α∀α∀α ∈∈∈∈ S (Inverso multiplicativo)
– Espaço Vetorial, X sobre o Campo escalar,S• X conjunto de vetores• {X; +}: Grupo Abeliano
– Obedece às seguintes propriedades ∀∀∀∀x e y ∈∈∈∈ X Se x + x = x ���� x = 0 (vetor nulo)Se z ∈∈∈∈ X e x + y = x + z ���� y = z
4.1 Escalares, Pontos e Vetores
13
Se z ∈∈∈∈ X e x + y = x + z ���� y = zSe z ∈∈∈∈ X e x + y = z + y ���� x = z∃∃∃∃w ∈∈∈∈ X w + x = y∃∃∃∃z ∈∈∈∈ X x + z = yx + y = y + x
• X é um S-módulo, isto é(αααα + ββββ)x = ααααx + ββββxαααα(x + y) = ααααx + ααααyαααα (ββββx) = (αααα . ββββ)x1x = x
Propriedades de Um grupo
– Espaço Euclidiano• Espaço vetorial com uma medida de tamanho ou distânciad(x,y) = Sqrt(x . y)
– Espaço Afim
4.1 Escalares, Pontos e Vetores
14
• Extensão do espaço vetorial, incluindo o objeto Ponto
• Inclui as operações– Adição vetor-ponto– Subtração ponto-ponto
4.1 Escalares, Pontos e Vetores
4.1.4 A visão da ciência da computação– Tipos abstratos de dados
• vector u, v;• point p, q;
15
• scalar a, b;
– Linguagens orientadas a objetos (C++)• Classes• Overloading de operadores
– q = p +a*v;
4.1 Escalares, Pontos e Vetores
4.1.5 Tipos Abstratos de Dados geométricos– Escalares: conjunto dos números reais
• Operações de adição e multiplicação
16
– Pontos: posições no espaço 3D– Vetores: segmentos de retas, direcionais
v = P - Q
P = v + Qv
Q
P
u
vu+v
4.1 Escalares, Pontos e Vetores
4.1.6 Linhas– Lugar geométricos dos pontos gerados
por operações ponto-vetorP(αααα) = P0 + αααα d (Forma paramétrica)
17
αααα 0 ααααP0 é um ponto arbitráriod é um vetor arbitrárioαααα é um escalar
– Se α α α α for > 0 P(αααα) é o raio que emana de P0 na direção d
4.1 Escalares, Pontos e Vetores
4.1.7 Somas afinsP = Q + αααα v– Possível encontrar um ponto R tal quev = R – Q– Assim
18
– AssimP = Q + αααα (R – Q)
= αααα R + (1 – α)α)α)α)Q= αααα1111 R + αααα2222Q
αααα1111 + αααα2 2 2 2 = 1
vQ
P(αααα)
Rα = 1α = 1α = 1α = 1
α = 0α = 0α = 0α = 0
4.1 Escalares, Pontos e Vetores
4.1.8 Convexidade– Segmento de linha é um objeto convexo– Convex hull (Fecho convexo) dos pontos
Pi, i = 1, 2, …, n
19
Pi, i = 1, 2, …, né o conjunto de pontos P definido pela
soma afim dos n pontosP = αααα1P1 + αααα2P2 + … + ααααnPnαααα1+ αααα2+ … + ααααn = 1ααααi > 0, i = 1, 2, …, n
4.1 Escalares, Pontos e Vetores
4.1.9 Produtos escalares e vetoriais
20
4.1 Escalares, Pontos e Vetores
• Dot product = Scalar product (a.b)
2
332211
For aaaba
ba
=⋅⇒=
++=⋅ bababa
21
• Angle between two nonzero vectorsFor aaaba =⋅⇒=
( )
baba
baba
≤⋅
≤≤=⋅
inequality Schwarz-Cauchy
0 ,cos πθθ
4.1 Escalares, Pontos e Vetores
• Scalar multiplication satisfies
( ) ( )( ) cabacba
baba
abba
⋅+⋅=+⋅=⋅=⋅
⋅=⋅
Law) ive(Distribut [c3]
scalar)( [c2]
Law) (Symmetric [c1]
kkk
22
( )
0a0aa
a0aa
cabacba
=⇔=⋅∀≥⋅
⋅+⋅=+⋅
(ii)
(i)
tesemidefini positive istion multiplicaScalar [c4]
Law) ive(Distribut [c3]
4.1 Escalares, Pontos e Vetores
• Scalar projection of a onto b: Pb(a)
( ) ( )θcos)( ab
ba
b
baab =⋅=
⋅=P
23
• Illustration of Pb(a)
bb
Pb(a)
b
a
θ
4.1 Escalares, Pontos e Vetores
• Vector projection of a onto b: Pb(a)
( ) ( )2
)()(b
bba
b
b
b
bauaaP bbb
⋅=
⋅== P
24
• Illustration of Pb(a)bbb
Pb(a)
b
a
θ
4.1 Escalares, Pontos e Vetores
• Vectors a and b are orthogonal if
( ) ( ) ( )θθθPP
=⇔==⇒
⇒==
0coscos0cos
0)()(
ba
ba ab
25
( ) ( ) ( )
ππθ
θθθ
k±=⇒
=⇔==⇒
2
0coscos0cos ba
θ
Pb(a)
b
a
Pa(b)
4.1 Escalares, Pontos e Vetores
• Basis formed by three mutually orthogonal unit vectors, ei (i =1, 2, 3)
if1 jiδ
===⋅ee
26
symbolKronecker thecalled -
if0
if1
ij
ijjiji
ji
δ
δ
≠=
==⋅ee
4.1 Escalares, Pontos e Vetores
Theorem 1.4: Let e1, e2, e3 be an orthonormal basis and let
a = a1e1 + a2e2 + a3e3b = b e + b e + b e . Then
27
b = b1e1 + b2e2 + b3e3. Then
ii
i
ii
ii
a
aaaaa
baaaa
ea
aaa
ba
⋅=
=++=⋅=
=++=⋅
∑
∑
=
=
(iii)
(ii)
bb b (i)
3
1
2
3
2
2
2
1
3
1i
332211
4.1 Escalares, Pontos e Vetores
Let (u1, u2, u3) and (v1, v2, v3) be ordered bases
and let
Then (v1, v2, v3) has the same orientation of (u , u , u ) if
∑=
=3
1i
iijj a uv
28
(u1, u2, u3) if
det(aij) > 0
Right-handed basis and opposite orientation Left-handed basis
4.1 Escalares, Pontos e Vetores
• Vector product = a x b
22
11
2
33
11
2
33
22
1222
111
eee
e
e
e
baba
ba
ba
ba
ba
ba
ba
ba
ba
+−==×
29
( ) ( ) ( ) 312212311312332
223333
333
eeeba
e
babababababa
babababa
−+−+−=×
4.1 Escalares, Pontos e Vetores
• Theorem 1.5
( ) ( )( ) handed-right a is ,, then ,0 If b)
and a) )(
),( wheresin )(
bababa
bbaaba
bababa
×≠×⊥×⊥×
∠==×
ii
i θθ
30
• Theorem 1.6
( )t tripletindependenlinearly
handed-right a is ,, then ,0 If b) bababa ×≠×
dependentlinearly are and ifonly and if ba0ba =×
4.1 Escalares, Pontos e Vetores
• Vector products satisfies[ ] ( )[ ] ( ) ( )[ ] ( ) ( )Law veDistributi
Law ativeAnticommut
2
1
1
cabacba
abba
abba
×+×=+××−=×
×−=×
E
E
E
31
[ ] ( ) ( )[ ] ( ) ( ) ( )[ ]
( ) ( )
:Note
scalar
Law veDistributi
4
3
2
cbacba
0aa
baba
cabacba
××≠××=×
=×=××+×=+×
E
kkkE
E
4.1 Escalares, Pontos e Vetores
• Triple scalar product: a����bxc
222
111
cba =×⋅ cba
cbaa b
c
32
( ) ( ) ( )[ ]
333
cbacbaabc
abccabbca
bacacbcba
⋅×=×⋅=×⋅−=×⋅−=×⋅−=
=×⋅=×⋅=×⋅
cbac
4.1 Escalares, Pontos e Vetores
• Theorem 1.7: [abc]=0 if and only if a, b, and c are linearly dependent.
• Theorem 1.8:
( ) ( ) ( )⋅−⋅=××
33
( ) ( ) ( )[ ] ( ) ( ) ( )( ) ( )( )[ ] ( ) ( ) [ ] [ ]
F
F
2
1
dabccabddcba
cbdadbcadcba
cbabcacba
−=×××⋅⋅−⋅⋅=×⋅×
⋅−⋅=××
4.1 Escalares, Pontos e Vetores
4.1.10 Planos– Extensão das linhas paramétricas– Três pontos não alinhados determinam um plano únicoS(αααα) = (1-α)α)α)α) P0 + ααααQ, 0 ≤≤≤≤ α α α α ≤≤≤≤ 1T(ββββ) = ((((1 −−−− β)β)β)β) S + β β β β R, 0 ≤≤≤≤ β β β β ≤≤≤≤ 1
R
34
T(ββββ) = ((((1 −−−− β)β)β)β) S + β β β β R, 0 ≤≤≤≤ β β β β ≤≤≤≤ 1T(α,ββββ) = ((((1 −−−− β)β)β)β) S + ββββ R= P0+α (α (α (α (1−−−−β)(β)(β)(β)(Q-P0))))+β(β(β(β(R-P0))))T(α,ββββ) = P0 + αααα’u + ββββ’v ∈∈∈∈∆∆∆∆P0QR
– Se P está no plano, entãoP – P0 = αααα’u + ββββ’vn . (P – P0 ) = (u x v) . (P – P0 ) = 0
S(α)P0 Q
T(α, β)
n
4.2 Primitivas Tridimensionais
• Assumir– Objetos descritos por suas superfícies– Considerar objetos como ocos – Objetos descritos por um conjunto de
35
– Objetos descritos por um conjunto de vértices
– Superfície pode ser aproximada por polígonos convexos
4.3 Sistemas de Coordenadas e Frames
4.3.0 Frame– É especificado por um ponto (origem) e um
conjunto de vetores LI (base)v2
36
– Todo vetor w e todo ponto P podem ser escritos comow = αααα1v1 + αααα2v2 + αααα3v3P = P0 + ββββ1v1 + ββββ2v2 + ββββ3v3
P0 v1v3
4.3 Sistemas de Coordenadas e Frames
4.3.1 Representações e n-tuplasSuponha que e1, e2, e3 formam uma basev = αααα1e1 + αααα2e2 + αααα3e3v = (αααα1, αααα2, αααα3) (representação 3-tupla)
37
v = (αααα1, αααα2, αααα3) (representação 3-tupla)
4.3 Sistemas de Coordenadas e Frames
4.3.2 Mudanças de sistemas de coordenadasu1 = γγγγ11111111v1 + γγγγ12121212v2 + γγγγ13131313v3u2 = γγγγ21212121v1 + γγγγ22222222v2 + γγγγ23232323v3
38
u2 = γγγγ21212121v1 + γγγγ22222222v2 + γγγγ23232323v3u3 = γγγγ31313131v1 + γγγγ32323232v2 + γγγγ33333333v3
u1 γγγγ11111111 γγγγ12121212 γγγγ13131313 v1 v1u2 = γγγγ21212121 γγγγ22222222 γγγγ23232323 v2 = M v2u3 γγγγ31313131 γγγγ32323232 γγγγ33333333 v3 v3
4.3 Sistemas de Coordenadas e Frames
4.3.2 Mudanças de sistemas de coordenadasw = αααα1111v1 + αααα2222v2 + αααα3333v3w = ββββ1111u1 + ββββ2222u2 + ββββ3333u3
v1 v1 a =MT b
39
v1 v1w = αααα1111 αααα2222 αααα3333 v2 = aT v2
v3 v3u1 u1 v1
w = ββββ1111 ββββ2222 ββββ3333 u2 = bT u2 = bTM v2u3 u3 v3
a =MT b
4.3 Sistemas de Coordenadas e Frames
4.3.3 Exemplo de mudança de representação v2
u1u2
θ2
1
2
1
100
0cossin
0sincos
v
v
v
u
u
u
−=
θθθθ
40
v1
v3
θ
( ) ( ) 321
3
2
1
3
2
1
321
33
4sincos2sin2cos
100
0cossin
0sincos
421
421421
100
uuuw
u
u
u
w
v
v
v
vvvw
vu
+−++=
−=
=++=
θθθθ
θθθθ
4.3 Sistemas de Coordenadas e Frames
4.3.4 Coordenadas homogêneas– Ponto
+++=
1
3210
v
vvvPP zyx
41
– Vetor
[ ]
=
0
3
2 1
P
v
vP zyx
[ ]
=
0
3
2
1
321 0
P
v
v
v
w δδδ
4.3 Sistemas de Coordenadas e Frames
4.3.5 Exemplo de mudança de frames
v2
u2 = v1 + v2
u3=v1 + v2 + v3A
42
v1
v3
u3=v1 + v2 + v3
u1 = v1Q0
P0A = P0 + 1 v1 + 1 v2 + 0 v3
A = Q0 + αααα u1 + ββββ u2 + γγγγ u3
Q0 = P0 + 1 v1 + 1 v2 + 0.5 v3
4.3 Sistemas de Coordenadas e Frames
=
11
3
2
1
3
2
1
0011
0001
111
011
001
v
v
v
v
v
v
v
u
u
u
43
=
+
=
0
3
2
1
0
3
2
0
3
2
1011
1000
0111
0011015.011
P
v
v
v
A
P
v
v
P
v
vA γβα
4.3 Sistemas de Coordenadas e Frames
−
−
−
⇒
+
=
10.0011110010011
01000
0100
0110
0111
1
5.0
1
1
1
0
1
1
α
γβα
44
−=
−−−
=
−−
−=
0
5.0
5.0
0
0
1
0
1
0000
5.0100
5.0110
1
0
1
0000
5.0100
1010
1000
0100
0110
0
γβα
γβ
4.3 Sistemas de Coordenadas e Frames
4.3.6 Trabalhando com representações– Considere a mudança de representação
do frame {i, j, k, P0} para o frame {u, v, w, Q0} através da transformação{a} = [C] {b}
45
{a} = [C] {b}• {b}: representação no frame {i, j, k, P0} • {a}: representação no frame {u, v, w, Q0}
– Considere a mudança inversa{b} = [D] {a} =>[D] = [C]-1
4.3 Sistemas de Coordenadas e Frames
– Assim
[ ] [ ]
[ ] [ ]
==
⇒
==
==
0100
0010
0001
00
00
0
1
0
00
0
0
1
j
i
j
i
j
i
j
ik
j
i
k
j
i
q
q
q
w
w
w
v
v
v
u
u
u
qw
v
v
v
u
u
u
DD
vDuD
46
[ ] [ ]
[ ] [ ]
==
==
10001000
0100
11
0
0
0
00
1
0
0
0
kkkk
k
j
i
k
j
i qwvu
q
q
q
w
w
w
QDwD
[ ] [ ]
1
1
1000
−
−
==k
j
i
k
j
i
k
j
i
k
j
i
q
q
q
w
w
w
v
v
v
u
u
u
DC
4.3 Sistemas de Coordenadas e Frames
– Aplicando ao exemplo anterior
[ ] [ ]
−−−
−
=
==
−
−
5.0100
5.0110
0011
5.0
1
1
1
1
1
0
1
1
0
0
11
1DC
47
−
1000
5.0100
1
5.0
0
1
0
0
0
0
4.3 Sistemas de Coordenadas e Frames
4.3.7 Frames e tipos abstratos de dadospoint3 p, q;vector3 v;frame f;
48
frame f;v = point_sub(p, q, f);
4.3 Sistemas de Coordenadas e Frames
4.3.8 Frames no OpenGL– Frame do Cenário (World Frame)– Frame da Câmera (Camera Frame)
• Default: coincide com o frame do cenáriox
49
• Default: coincide com o frame do cenário
-zc
xc=xw
yc=ywzc=zw
w
xw
yw
zw
c
zc
xc
ycCâmera
4.4 Modelando um Cubo Colorido
4.4.1 Modelagem de um cubo– 8 vértices:
• GLfloat vertices[8][3]; ou• point3 vertices[8];
50
– 6 faces:• glBegin(GL_POLYGON);
4
7
65
3
21
4.4 Modelando um Cubo Colorido
4.4.2 Faces voltadas para dentro e para fora– Obedecer regra da mão-direita
51
4
7
65
3
21
4.4 Modelando um Cubo Colorido
4.4.3 Estruturas de dados para representação de objetos– Cubo é um poliedro composto de
• 6 faces, cada uma das quais composta de
52
– 4 arestas, cada uma das quais ligadas a » 2 vértices
4.4 Modelando um Cubo Colorido
4 3E4
E3E2
Cubo F1
F2
E11 E2 E10 E6
E4 E1 E2 E3
FACES
53
8 7
65
21
E6
E5
E4 E2E1
E12 E11
E10E9
E8E7
F2
F3
F4
F5
F6
E4 E1 E2 E3
E10 E1 E9 E5
E9 E4 E12 E8
E6 E5 E8 E7
E12 E3 E11 E7
OBS: Pode-se definir uma face como uma seqüência de vértices. F1: 7 3 2 6
4.4 Modelando um Cubo Colorido
4 3E3
E1
E2
E3
E4
E5
V1 V2
V3 V2
V4 V3
V4 V1
V5 V6
V1
V2
V3
V4
V5
-1
1
1
-1
-1
1
1
1
1
-1
1
1
-1
-1
1
ARESTAS VÉRTICES
54
8
4
7
65
3
21
E6
E5
E4 E2E1
E12 E11
E10E9
E8E7
E5
E6
E7
E8
E9
E10
E11
E12
V5 V6
V7 V6
V8 V7
V8 V5
V5 V1
V6 V2
V7 V3
V8 V4
V5
V6
V7
V8
-1
1
1
-1
-1
-1
-1
-1
1
1
-1
-1
4.4 Modelando um Cubo Colorido
4.4.4 O cubo de corestypedef GLfloat point3[3];point3 vertices[8] = { {-1.0, 1.0, 1.0}, { 1.0, 1.0, 1.0},
{ 1.0, 1.0,-1.0}, {-1.0, 1.0,-1.0},{-1.0,-1.0, 1.0}, { 1.0,-1.0, 1.0},
55
{-1.0,-1.0, 1.0}, { 1.0,-1.0, 1.0},{ 1.0,-1.0,-1.0}, {-1.0,-1.0,-1.0}};
GLfloat colors[8][3] = {{0.0, 0.0, 0.0}, {1.0, 0.0, 0.0},{1.0, 1.0, 0.0}, {0.0, 1.0, 0.0},{0.0, 0.0, 1.0}, {1.0, 0.0, 1.0},{ 1.0, 1.0, 1.0}, {0.0, 1.0, 1.0}};
4.4 Modelando um Cubo Colorido
void quad(int a, int b, int c, int d){
glBegin(GL_QUADS);glColor3fv(colors[a]);glVertex3fv(vertices[a];glColor3fv(colors[b]);
56
glColor3fv(colors[b]);glVertex3fv(vertices[b];glColor3fv(colors[c]);glVertex3fv(vertices[c];glColor3fv(colors[d]);glVertex3fv(vertices[d];
glEnd();}
4.4 Modelando um Cubo Colorido
void colorcube(void){
quad(6, 2, 1, 5);quad(3, 0, 1, 2);quad(5, 1, 0, 4);quad(4, 0, 3, 7);
57
quad(4, 0, 3, 7);quad(6, 5, 4, 7);quad(7, 3, 2, 6);
}
Código Fonte
Código Exec
4.4 Modelando um Cubo Colorido
4.4.5 Interpolação bilinearc1
c2c4
c45C01(α)=(1-α)C0 + αC1
58
c0
c3
c45
c5
C23(α)=(1-α)C2 + αC3
C45(β)=(1-β)C4 + βC5
4.4 Modelando um Cubo Colorido
4.4.6 Arrays de vértices– Encapsula informação da estrutura de
dados– Permite traçar poliedros com poucas
59
– Permite traçar poliedros com poucas chamadas de funções
– Tipos de arrays permitidos no OpenGL
• vertex • normal
• color • texture coordinate
• color index • edge flag
4.4 Modelando um Cubo Colorido
– Habilitação dos arrays• glEnableClientState(GL_COLOR_ARRAY);• glEnableClientState(GL_VERTEX_ARRAY);
– Os arrays do cubo já foram definidos • vertices
60
• Colors
– Estabelecer ponteiros para os arrays• glVertexPointer(3, GL_FLOAT, 0, vertices);
– 3: número de coordenadas por vértice– GL_FLOAT: tipo de cada elemento no array– 0: offset em bytes entre vértices consecutivos– vertices: ponteiro para o array de vértices
4.4 Modelando um Cubo Colorido
• glColorPointer(3, GL_FLOAT, 0, colors);– 3: número de coordenadas por vértice– GL_FLOAT: tipo de cada elemento no array– 0: offset em bytes entre vértices consecutivos– colors: ponteiro para o array de cores
– Fornecer informação da estrutura de dados
61
– Fornecer informação da estrutura de dados• GLubyte cubeIndices[24] = {6, 2, 1, 5,
3, 0, 1, 2,5, 1, 0, 4,4, 0, 3, 7,6, 5, 4, 7,7, 3, 2, 6};
4.4 Modelando um Cubo Colorido
– Desenhar o arraysfor (i=0; i < 6; i++)
glDrawElements(GL_POLYGON, 4, GL_UNSIGNED_BYTE, &cubeIndices[4*i]);
Ou
62
OuglDrawElements(GL_QUADS, 24,
GL_UNSIGNED_BYTE, cubeIndices);
4.5 Transformações Afins (A17)
• Transformação de um ponto P em QQ = T(P)
• Transformação de um vetor u em vv = R(u)
63
v = R(u)
• Em coordenadas homogêneas, vetores e pontos são representados como matrizes colunas 4DQ = f(P) e v = f(u) (mesma transformação)
4.5 Transformações Afins (A17)
• Restringir f a uma função linearf(ααααp + ββββq) = ααααf(p) + ββββf(q)– Importância
• Conhecendo a transformação de vértices
64
• Conhecendo a transformação de vértices• Obtém-se a transformação de combinações lineares de vértices através de combinações lineares de transformações de vértices
– f pode ser representada por uma matriz 4x4, [A]
4.5 Transformações Afins (A17)
–Matriz de Transformação não-singular• Mudança de frame• Mudança do vértice dentro do mesmo frame
–Matriz Vetor Ponto
pvaaaa
65
=
=
=
1
0
1000
3
2
1
3
2
1
34333231
24232221
14131211
p
p
p
v
v
v
aaaa
aaaa
aaaa
PvA
4.5 Transformações Afins (A17)
– Transformação de vetores• Envolve apenas nove coeficientes da matriz• 9 graus de liberdade
– Transformação de pontos• Envolve 12 coeficientes da matriz
66
• Envolve 12 coeficientes da matriz• 12 graus de liberdade
– Transformações afins preservam linhas• Linha original: P(αααα) = P0 + α d• Transformação:A P(α) = A(P0 + α d)= AP0 + α Ad • Linha final: P’(αααα) = P’0 + α d’
4.6 Translação, Rotação e Escala (A17)
4.6.1 Translação– Operação ponto-vetor
P’ = P + tx’ = x + tx
67
x’ = x + txy’ = y + tyz’ = z + tz P
P’t
y
4.6 Translação, Rotação e Escala
• Translação– Somar o vetor de translação t = (tx, ty, tz)aos vértices para reposicionar objetos
68
P’ = P + t
x’ = x + tx
y’ = y + ty
z’ = z + tz
x
y
t = ( tx, ty, tz)
P = (x, y, z)
P’=(x’, y’,z’)
4.6 Translação, Rotação e Escala
4.6.2 Rotaçãovértice P em coordenadas polares (r, αααα) irá para posição P’ = (r, α+α+α+α+θθθθ)θθθθ > 0 : rotação em sentido anti-horário
69
θθθθ > 0 : rotação em sentido anti-horárioθθθθ < 0 : rotação em sentido horário
ei
P = ( r, α )
P’ = ( r, α + θ ) ej
α
θr
r
4.6 Translação, Rotação e Escala
• Rotação em torno do eixo x– Coordenadas na forma polar:y’ = r cos ( α + θα + θα + θα + θ ) y = r cos ααααz’ = r sen ( α + θα + θα + θα + θ ) z = r sen αααα
– Mas: x y
zθθθθx
70
– Mas:cos ( α + θα + θα + θα + θ ) = cos αααα . cos θθθθ - sen αααα . sen θθθθsen ( α + θα + θα + θα + θ ) = sen αααα . cos θθθθ + sen θθθθ . cos αααα
– Assim:y’ = r cos αααα . cos θθθθ - r sen αααα . sen θθθθz’ = r sen αααα . cos θθθθ + r cos αααα . sen θθθθy’ = y . cos θθθθ - z . sen θθθθz’ = z . cos θθθθ + y . sen θθθθ
4.6 Translação, Rotação e Escala
Rotação em torno do eixo x
−=
y
x
seny
x
xx θθcos0
001
'
'
71
−=
z
y
sen
sen
z
y
xx
xx
θθθθ
cos0
cos0
'
'
4.6 Translação, Rotação e Escala
• Rotação em torno do eixo y– Coordenadas na forma polar:z’ = r cos ( α + θα + θα + θα + θ ) z = r cos ααααx’ = r sen ( α + θα + θα + θα + θ ) x = r sen αααα
– Mas: y z
xθθθθy
72
– Mas:cos ( α + θα + θα + θα + θ ) = cos αααα . cos θθθθ - sen αααα . sen θθθθsen ( α + θα + θα + θα + θ ) = sen αααα . cos θθθθ + sen θθθθ . cos αααα
– Assim:z’ = r cos αααα . cos θθθθ - r sen αααα . sen θθθθx’ = r sen αααα . cos θθθθ + r cos αααα . sen θθθθz’ = z . cos θθθθ - x . sen θθθθx’ = x . cos θθθθ + z . sen θθθθ
4.6 Translação, Rotação e Escala
Rotação em torno do eixo y
=
y
xsen
y
x yy θθ010
0cos
'
'
73
−=
z
y
senz
y
yy θθ cos0
010
'
'
4.6 Translação, Rotação e Escala
• Rotação em torno do eixo z– Coordenadas na forma polar:x’ = r cos ( α + θα + θα + θα + θ ) x = r cos ααααy’ = r sen ( α + θα + θα + θα + θ ) y = r sen αααα
– Mas: z x
yθθθθz
74
– Mas:cos ( α + θα + θα + θα + θ ) = cos αααα . cos θθθθ - sen αααα . sen θθθθsen ( α + θα + θα + θα + θ ) = sen αααα . cos θθθθ + sen θθθθ . cos αααα
– Assim:x’ = r cos αααα . cos θθθθ - r sen αααα . sen θθθθy’ = r sen αααα . cos θθθθ + r cos αααα . sen θθθθx’ = x . cos θθθθ - y . sen θθθθy’ = y . cos θθθθ + x . sen θθθθ
4.6 Translação, Rotação e Escala
Rotação em torno do eixo z
−
=
y
x
sen
sen
y
x
zz
zz
0cos
0cos
'
'
θθθθ
75
=
z
ysen
z
y zz
100
0cos
'
' θθ
4.6 Translação, Rotação e Escala
• Rotação em torno de um eixo // z passando pelo pivô, (xR, yR) vértice (x, y) irá para posição (x’, y’)
76x
y
(xR, yR)
P = ( r, α )
P’ = ( r, α + θ )
α
θr
r
4.6 Translação, Rotação e Escala
• Rotação em torno do eixo //z pelo pivô, (xR,yR, zR) Equivale a – Translação para a origem ( 0, 0, 0 )
77
– Translação para a origem ( 0, 0, 0 )– Rotação em relação ao eixo z– Translação de volta para (xR,yR, zR)
4.6 Translação, Rotação e Escala
• Rotação em torno de eixo // z pelo pivô (xR, yR)x’ = (x - xR) . cos θθθθ - (y - yR) . sen θθθθ + xRy’ = (y - yR) . cos θθθθ + (x - xR) . sen θθθθ + yR
78
y’ = (y - yR) . cos θθθθ + (x - xR) . sen θθθθ + yR
+
−−
−=
R
R
R
R
y
x
yy
xx
sen
sen
y
x
θθθθ
cos
cos
'
'
4.6 Translação, Rotação e Escala
• Rotação para objetos definidos com curvas – transformações geométricas aplicadas a coordenadas de definição
– implementações adaptadas à geometria do
79
– implementações adaptadas à geometria do objeto
• Exemplos – Círculos
• rotação ou translação: usar coordenadas do centro, e
• escala: amplificar os raios
4.6 Translação, Rotação e Escala
• Rotação para objetos definidos com curvas– Segmentos de curvas – transformação: usar coordenadas de
80
P1
P2
P3P4
– transformação: usar coordenadas de definição da curva (Pontos de controle)
4.6 Translação, Rotação e Escala
4.6.3 Escala– É uma transformação afim que altera a forma do objeto (non-rigid-body)
–Multiplicar os valores das coordenadas por
81
–Multiplicar os valores das coordenadas por fatores de escala sx, sy, sz
– Transformação básica de escala– (x’, y’, z’) = (x.sx, y.sy, z.sz ), sx, sy, sz > 0–Mudança uniforme de Escala quando sx = sy = sz
4.6 Translação, Rotação e Escala
• Efeito da transformação de escala–mudança do tamanho do objeto – deslocamento do objeto– distorção se sx != sy
82
x
y
– distorção se sx != sy
4.6 Translação, Rotação e Escala
• Escala relativa a um ponto fixo, PfPf = ( xf, yf ) – se ( xf, yf ) for centróide →→→→ objeto não move
83
move– senão →→→→ deslocamento em relação a Pf
x
y
centróide
4.6 Translação, Rotação e Escala
• Coordenadas do centróide
∫
∫
∫
∫
∫
∫=== V
cV
cV
cdV
zdV
zdV
ydA
ydV
xdV
x e ,
84
∫∫∫VVV
dVdVdV
+
+=
+
++=
HBHB
HBH
HBH
y
HBHB
HBB
BHBB
x
c
c
21
21
21
22
111
2
1)(
2
1
3)(
2
2
1)(
2
1
3)(
2
B1 B2
H
H/3 H/2
B1/2 B2/3
4.6 Translação, Rotação e Escala
• Escala relativa a um ponto fixo, Pfx’ = ( x −−−− xf ) . sx + xfy’ = ( y −−−− yf ) . sy + yfz’ = ( z −−−− zf ) . sz + zf
85
z’ = ( z −−−− zf ) . sz + zf– Translação para a origem ( 0, 0, 0 )– Escala em relação à origem– Translação de volta para ( xf, yf )
(xf, yf) (xf, yf)
4.7 Transformações em Coordenadas Homogêneas (A17)
• Usando-se coordenadas homogêneas, as transformações geométricas são escritas como
+++=
' xx
86
+++
+++
+++
===
⇒
=
34
24
14
33
23
13
32
22
12
31
21
11
'
'
'
11
'
'
'
m
m
m
zm
zm
zm
ym
ym
ym
xm
xm
xm
z
y
x
z
y
x
z
y
x
M
4.7 Transformações em Coordenadas Homogêneas (A17)
4.7.1 Translação–Matriz de Translação
010
001
yt
xt
87
– Forma inversa ( T-1) com -tx, -ty, -tz.
=
1000
100
010
zt
ytT
4.7 Transformações em Coordenadas Homogêneas (A17)
4.7.2 Escala–Matriz de Escala em relação a um ponto fixo, F ( )
( )
−−
=100
100
Fyy
Fxx
ySS
xSS
88
– A escala é uniforme quando Sx = Sy = Sz
– Forma inversa S-1 com
( )( )
−−
=
1000
100
100
Fzz
Fyy
zSS
ySSS
z
z
y
y
x
xS
SS
SS
S1
',1
',1
' →→→
4.7 Transformações em Coordenadas Homogêneas (A17)
4.7.3 Rotação– Em 3D, as rotações podem ser sobre qualquer reta
– As rotações mais simples são sobre os eixos de coordenadas
89
eixos de coordenadas– Outras rotações são equivalentes a combinações das rotações dos 3 eixos-coordenados (mais T e T’).
– Para todas as rotações 3D sobre eixos de coordenadas• θ θ θ θ > 0: rotação anti-horária (a partir da origem) na regra da mão-direita
4.7 Transformações em Coordenadas Homogêneas (A17)
– Rotação em relação ao eixo-x
−=
0cos0
0cos0
0001
xx
xx
xsen
sen
θθθθ
Rx
y
θx
90
– Rotações sobre os outros dois eixos são obtidas com permutação cíclicax →→→→ y →→→→ z →→→→ x
1000
0cos0 xxsen θθ
z
x
4.7 Transformações em Coordenadas Homogêneas (A17)
– Rotação em relação ao eixo-y
−=
0cos0
0010
00cos
yy
yy
ysen
sen
θθ
θθ
R
x
y
θy
91
−1000
0cos0 yysen θθ
z
x
4.7 Transformações em Coordenadas Homogêneas (A17)
– Rotação em relação ao eixo-z
−
=0100
00cos
00cos
zz
zz
z
sen
sen
θθθθ
R
x
y
92
1000
0100
z
xθz
4.7 Transformações em Coordenadas Homogêneas (A17)
– Obtém-se a inversa de Rx, Ry ou Rz comθθθθ →→→→ - θθθθcomo • cos(-θθθθ) = cos(θθθθ)
93
• sen(-θθθθ) = - sen(θθθθ),
R-1 = RT
– R são matrizes ortonormais
4.7 Transformações em Coordenadas Homogêneas (A17)
– Outras rotações são obtidas por composição de matrizes de transformação• Transformação do eixo de rotação em um eixo de coordenada
• Rotação especificada em torno do eixo
94
• Rotação especificada em torno do eixo transformado
• Transformação do eixo de rotação de volta para a posição e orientação originais
4.7.4 Cisalhamento (Shear)– Cisalhamento no plano xy na direção xx’ = x+∆∆∆∆x = x + tg(γγγγ)y = x + shxyy’ = y
4.7 Transformações em Coordenadas Homogêneas (A17)
95
y’ = yz’ = z y
x
yp
xp
P
y
x
yp’
P’
xp ∆∆∆∆x
∆∆∆∆x
– Cisalhamento no plano xy na direção x
4.7 Transformações em Coordenadas Homogêneas (A17)
=0100
0010
00sh1 x
x
xyS
96
1000
0100xy
– Cisalhamento no plano xy na direção yx’ = xy’ = y+∆∆∆∆y = y + tg(γγγγ)x = y + shyxz’ = z
4.7 Transformações em Coordenadas Homogêneas (A17)
y y
97
z’ = zy
xxp
yp
P
x
y
xp’
P’
yp
∆∆∆∆y
∆∆∆∆y
– Cisalhamento no plano xy na direção y
4.7 Transformações em Coordenadas Homogêneas (A17)
=0100
001sh
0001
yy
xyS
98
1000
0100xy
– Cisalhamento no plano xz na direção x
4.7 Transformações em Coordenadas Homogêneas (A17)
=0100
0010
0sh01 x
x
xzS
99
1000
0100xz
– Cisalhamento no plano xz na direção z
4.7 Transformações em Coordenadas Homogêneas (A17)
=010sh
0010
0001
z
xzS
100
1000
010sh zxz
– Cisalhamento no plano yz na direção y
4.7 Transformações em Coordenadas Homogêneas (A17)
=0100
0sh10
0001
yy
yzS
101
1000
0100yz
– Cisalhamento no plano yz na direção z
4.7 Transformações em Coordenadas Homogêneas (A17)
=01sh0
0010
0001
z
yzS
102
1000
01sh0 zyz
4.7 Transformações em Coordenadas Homogêneas (A17)
4.7.5 Outras Transformações– Reflexão: imagem de objeto em relação a um plano
– Espelho xz: y →→→→ - y
001
103
→→→→• Equivale a sx = sz = 1, sy = -1
– Espelho yz: x →→→→ - x• Equivale a sx = -1, sy = sy = 1
−=100
010S
−=
100
010
001
S
4.7 Transformações em Coordenadas Homogêneas (A17)
– Espelho xy: z →→→→ - z• Equivale a sx = sy = 1, sz = -1
– Espelho cuja normal é n = (nx, ny, nz):
−=
100
010
001
S
104
– Espelho cuja normal é n = (nx, ny, nz):
( )( )
( )( )
−−−−−−−−−
=
−=−=′
332313
322212
312111
2122
2212
2221
2)(2
nnnnnn
nnnnnn
nnnnnn
S
PnnnnPPP
n
kkiikikkii δ
P
P’ n
x
y
4.7 Transformações em Coordenadas Homogêneas (A17)
–Reflexão relativa à origem: x →→→→ - x e y →→→→ - y• Equivale a sx = -1, sy = -1
105
4.7 Transformações em Coordenadas Homogêneas (A17)
Transformações entre sistemas de coordenadas
• Usado em– Transformações de Visualização
106
– Transformações de Visualização– Transformações de Modelagem
• Transformação entre sitemas paralelos com origens distintas
• Transformações entre sistemas centrados na mesma origem com orientações distintas
4.7 Transformações em Coordenadas Homogêneas (A17)
• Transformação entre sistemas paralelos com origens distintas– Aplicar translação To’o aos pontos da cena
+′=′ OO PP
107
x’
x
O’
O
y’y
P’P
′−
′−
′−
=′
+′=′
1
P
P
P
1000
O100
O010
O001
OO
z
y
x
z
y
x
P
PP
4.7 Transformações em Coordenadas Homogêneas (A17)
• Transformações entre sistemas centrados na mesma origem com orientações distintas– Construir matriz de transformação cujas linhas são vetores unitários nas direções de x’ y’ e z’ representados por suas componentes no sistema x y z
108
x y z
=′
=′
=′
=′
′′′
′′′
′′′
′
′
′
′
′
′
′
′
′
1
P
P
P
1000
0
0
0
z
y
x
zzz
yyy
xxx
z
z
z
y
y
y
x
x
x
nml
nml
nml
n
m
l
n
m
l
n
m
l
P
kji
x’
x
y’y P
z
z’
4.7 Transformações em Coordenadas Homogêneas (A17)
• Assim
=
=
′
′
′
′′′
′′′
′′′
′
′
′
′′′
′′′
′′′
0
0
0
0
1
0
0
0
0
0
0
1
y
y
y
zzz
yyy
xxx
x
x
x
zzz
yyy
xxx
n
m
l
nml
nml
nml
n
m
l
nml
nml
nml
x’
x
y’y P
zz’
109
=
′
′
′
′′′
′′′
′′′
′′′′′′′′
11000
0
0
0
1
1
0
0
11000
0
1
0
11000
0
1
0
z
z
z
zzz
yyy
xxx
yzzzxzzz
n
m
l
nml
nml
nml
nnmlnnml
Como T é ortonormal
T-1=TT
P’=T.P e P =TT.P’
4.8 Concatenação de Transformações (A18)
4.8.1 Rotação em torno de um ponto fixo– Utilizar concatenação de 3 operações
• Translação do ponto fixo para a origem– T(-PF)
• Rotação em torno do eixo passando pela
110
• Rotação em torno do eixo passando pela origem– R(θθθθ)
• Translação de volta para a posição do ponto fixo– T(PF)
• P’ = [T(PF) R(θθθθ) T(-PF)] P
4.8 Concatenação de Transformações (A18)
4.8.2 Rotação geral– É possível expressar como concatenação
de rotações em torno de z, y e x• R = RxRyRz
111
4.8 Concatenação de Transformações (A18)
4.8.3 Transformação de instância– Usar um objeto protótipo – Gerar instância desse objeto – Aplicar transformações para a forma
112
– Aplicar transformações para a forma desejada
4.8 Concatenação de Transformações (A18)
4.8.4 Rotação sobre um eixo arbitrário• Definir o eixo de rotação
– dois pontos sobre a reta ou– um ponto e um vetor-direção
• O segmento P1P2
y
zx
p1
p2θ
113
• O segmento P1P2(“segmento de reta orientado”) define um vetor V = (x2-x1, y2-y1, z2-z1)
• Determinar uma forma de rotação geral de matriz usando operações com vetores
z
4.8 Concatenação de Transformações (A18)
– Rotação sobre um eixo arbitrário
1. Translação do eixo de rotação para a origem
2. Rotações para alinhar o eixo de rotação com o
eixo z (ou outro eixo)
114
eixo z (ou outro eixo)
3. Rotação sobre o eixo z
4. Inversão das rotações no passo 2
5. Inversão da translação do passo 1
4.8 Concatenação de Transformações (A18)
– Rotação sobre um eixo arbitrário
y(2)
y(1)
yInício
p2
115
y
z x
z x
y
z x
(5)
z x
(4)y
z x
(3)
θ
z xp1
4.8 Concatenação de Transformações (A18)
– Rotação sobre um eixo arbitrário• Coordenadas de p1 e p2 determinam o vetor unitário û ao longo do eixo de rotação
)12,12,12(V zzyyxx −−−=yp2
116
||12,
||12,
||12
),,(||
121212
VVV
V
Vu
zzc
yyb
xxa
cba
−=
−=
−=
==
z x
p1
p2
4.8 Concatenação de Transformações (A18)
– Rotação sobre um eixo arbitrárioPasso 1: Translação de p1 para a origem
−0011
x
y
p
117
−
−
−
=
1
100
010
001
0001
1
1
z
y
x
Tz xp1
p2
4.8 Concatenação de Transformações (A18)
Passo 2.1: Posicionamento do eixo de rotação no plano xz• determinar ângulo θθθθx entre û’ e k• girar de um ângulo θθθθx sobre o eixo x
y
118
(0, b, c) =
( )22 cb,0,a +=′′û
û =(a, b, c)û’
x
y
z
θθθθx
4.8 Concatenação de Transformações (A18)
– determinar ângulo θθθθx entre û’ e k• Encontre o cos θθθθx
22
1|'ˆ|'ˆ
coscos|||ˆ|'ˆdc
xx' =⋅=⇒=⋅u
kukuku θθ
119
• Encontre o sen θθθθx
22|'ˆ| onde cbd +== u
d
b
d
cd
d
cxsen =−=−=
2
2221θ
4.8 Concatenação de Transformações (A18)
– girar de um ângulo θθθθx sobre o eixo x
−=
01
0001
)(dbdc
xx θR
120
=
1000
00
)(dcdb
xx θR
4.8 Concatenação de Transformações (A18)
Passo 2.2: Alinhamento do eixo de rotação com o eixo z• determinar ângulo θθθθy entre û” e k• girar û” de um ângulo -θθθθy sobre o eixo y
y
121
( )22 cb,0,a +=′′û
û =(a, b, c)
x
y
z θθθθy
– determinar ângulo θθθθy entre û” e k• Encontre o cos θθθθy
da
dy
+=⋅=θ
22|||''ˆ|''ˆ
coskuku
4.8 Concatenação de Transformações (A18)
122
• Encontre o sen θθθθy
dycbada =⇒=++=+ θcos122222 mas
ay
senaysen −=−⇒=
θθ
4.8 Concatenação de Transformações (A18)
– girar de um ângulo – θθθθy sobre o eixo x
−
=− 0010
00
)(
ad
yy θR
123
=−
1000
00)(
dayy θR
4.8 Concatenação de Transformações (A18)
Passo 3: Rotação de θθθθ sobre o eixo z
−
=00cossen
00sencos
)(θθθθ
θR
124
=
1000
0100
00cossen)(
θθθzR
4.8 Concatenação de Transformações (A18)
– Passo 4: Inverso do passo 2.2, Ry(θθθθy)– Passo 5: Inverso do passo 2.1, Rx(-θθθθx)– Passo 6: Inverso do passo 1, T(P1)– Assim a Rotação em torno do eixo P1P2
125
– Assim a Rotação em torno do eixo P1P2( ) ( ) ( ) ( ) ( ) ( ) ( )11 PTRRRRRPTM −−−= xxyyzyyxx θθθθθ
=
1000
0333231
0232221
0131211
rrr
rrr
rrr
M
4.8 Concatenação de Transformações (A18)
– Rotação sobre um eixo arbitrárioManeira alternativa• Construir uma base ortogonal i’ j’ k’ tal que k’ seja o vetor unitário na direção P1P2
• Transformar os pontos da cena para esse
126
• Transformar os pontos da cena para esse sistema de coordenadas
• Girar em torno de z’• Transformar os ponto para o sistema original
y
z x
p1
p2
4.9 Matrizes de Transformação no OpenGL (A19)
4.9.1 A Matriz de transformação corrente– Aplicada aos vértices subseqüentes à sua
montagem– É uma matriz 4 x 4– Inicializada como a matriz identidade
127
– Inicializada como a matriz identidade– Modificada por pós-multiplicação de
matrizes • C ←←←← CT (Translação)• C ←←←← CS (Escala)• C ←←←← CR (Rotação)
4.9 Matrizes de Transformação no OpenGL (A19)
– Definida diretamente com o comando glLoadMatrix{fd}(M); • C ←←←← M• M é um array com 16 elementos de tipo float
ou double que compõem 4 a 4 as colunas de C
128
ou double que compõem 4 a 4 as colunas de C
=
161284
151173
141062
13951
mmmm
mmmm
mmmm
mmmm
M
4.9 Matrizes de Transformação no OpenGL (A19)
– Modificada com o comando glMultMatrix{fd}(M); • C ←←←← CM• M é um array com 16 elementos de tipo float
ou double que compõem 4 a 4 as colunas da
129
ou double que compõem 4 a 4 as colunas da matriz
=
161284
151173
141062
13951
mmmm
mmmm
mmmm
mmmm
M
4.9 Matrizes de Transformação no OpenGL (A19)
– Os vértices são transformados pela matriz corrente resultante de dois modos• GL_PROJECTION (modo de projeção)• GL_MODELVIEW (modo de modelagem e
visualização)
130
visualização)• glMatrixMode(modo): Seleciona um dos dois
modos
• C ←←←← CProjectionCModel_View
vértices CModel_View CProjection vértices
4.9 Matrizes de Transformação no OpenGL (A19)
4.9.2 Rotação, translação e escala– glRotatef(ângulo, vx, vy, vz);
• Ângulo em graus• (vx, vy, vz) vetor na direção da rotação
131
– glTranslatef(dx, dy, dz);• (dx, dy, dz) vetor de deslocamento
– glScalef(sx, sy, sz);• sx, sy, sz: fatores de escala
4.9 Matrizes de Transformação no OpenGL (A19)
4.9.3 Rotação em torno de um ponto fixo– Composição de transformações
glMatrixMode(GL_MODELVIEW);glLoadIdentity();
y QQ
2
132
glTranslatef(Px, Py, Pz);glRotatef(ângulo, vx, vy, vz);glTranslate(-Px, -Py, -Pz);
– v’ = T(Px, Py, Pz) R(αααα, vx, vy, vz) T(-Px, -Py, -Pz) v
zx
PP 1
3
4.9 Matrizes de Transformação no OpenGL (A19)
4.9.4 Ordem de transformações– Duas maneiras de ver a ordem de
transformações• C ←←←← CMn
• C ←←←← CM…
M2
M1
Desempilhar
133
• C ←←←← CMn-1
• …• C ←←←← CM2
• C ←←←← CM1
Mn
Mn-1
…
v’ = MnMn-1…M2M1 v444 3444 21
C
Desempilhar
Pilha
4.9 Matrizes de Transformação no OpenGL (A19)
4.9.5 Rotação de um cubo sem translação– Funções Callback
• glutDisplayFunc(display)
134
• glutIdleFunc(spincube)• glutMouseFunc(mouse)• glutKeybordFunc(keyboard)
4.9 Matrizes de Transformação no OpenGL (A19)
– Função display• Aplica as matrizes de rotação em torno dos
eixos x y e z
– Função spincube• Incrementa o ângulo de rotação em torno do
135
• Incrementa o ângulo de rotação em torno do eixo selecionado e chama display
– Função mouse• Seleciona o eixo de rotação
– Função keyboard• Encerra o programa pressionando ‘q’ ou ‘Q’Código Fonte Código Exec
4.9 Matrizes de Transformação no OpenGL (A19)
4.9.6 Loading, pushing, e popping de matrizes– Loading matix M como matriz corrente
• glLoadMatrixf(M);
136
– Salvando a matriz corrente na pilha• glPushMatrix()
– Retirando a matriz da pilha e tornando-a corrente• glPopMatrix()
4.10 Interfaces para Aplicações 3D (A19)
4.10.1 Usando áreas do screen– Motion callback retorna: botão ativado e
posição do mouse– Botão esquerdo pressionado
• Mouse no centro: nenhuma rotação
137
• Mouse no centro: nenhuma rotação• Mouse movendo para cima: rotação y+• Mouse movendo para baixo: rotação y-• Mouse movendo para direita: rotação x+• Mouse movendo para esquerda: rotação x-• Mouse movendo para os cantos: rotação
combinada x y
4.10 Interfaces para Aplicações 3D (A19)
– Botão direito pressionado• Mouse no centro: nenhuma translação• Mouse movendo para cima: translação y+• Mouse movendo para baixo: translação y-• Mouse movendo para direita: translação x+
138
• Mouse movendo para direita: translação x+• Mouse movendo para esquerda: translação x-• Mouse movendo para os cantos: translação
combinada x y– Botão do meio pressionado
• Mouse movendo para direita: translação z+• Mouse movendo para esquerda: translação z-
4.10 Interfaces para Aplicações 3D (A19)
– Velocidade do movimento• Quanto mais longe do centro mais rápido o
movimento
Código Fonte
139
Código Fonte
Código Exec
4.10 Interfaces para Aplicações 3D (A19)
4.10.2 Uma Trackball virtual– Dada uma posição (x, z) no plano
• Calcule o ponto no hemisfério
y221 zxy −−=
140
x
y
z
(x, y, z)
(x, 0, z)
221 zxy −−=
4.10 Interfaces para Aplicações 3D (A19)
4.10.2 Uma Trackball virtual– Primeiro clique no botão do mouse
• Define ponto P1 no hemisfério
– Mouse move, liberar botão y
141
– Mouse move, liberar botão• Define ponto P2 no hemisfério
– Calcula vetor normal • n = P1 x P2
x
y
z
P1
(x, 0, z)
P2
nCódigo Fonte
Código Exec
4.10 Interfaces para Aplicações 3D (A19)
4.10.3 Rotações suaves– A partir dos key-frames indicados
• gerar aviões em posições intermediárias ao longo da rota, interpolando as orientações
142
4.10 Interfaces para Aplicações 3D (A19)
– As orientações dos aviões nos key-frames são obtidas através de matrizes de rotação• R = Rx(θθθθx) Ry(θθθθy) Rz(θθθθz)
– E=(θθθθ , θθθθ , θθθθ ): Ângulos de Euler
143
– E=(θθθθx, θθθθy, θθθθz): Ângulos de Euler
– Considere dois conjuntos de ângulos de Euler• Ei e Ei+1• Calcular Ek = Interpolação(Ei, Ei+1)• Animação não ficará suave
4.10 Interfaces para Aplicações 3D (A19)
– Modificar a orientação interpolando entre os vetores vermelhos como no caso da trackball
144
4.10 Interfaces para Aplicações 3D (A19)
4.10.4 Rotações incrementais– Como no caso da trackball virtual
• Achar o círculo ao longo da superfície esférica que leva de uma orientação à outra
• Incrementar o ângulo de rotação ao longo do
145
• Incrementar o ângulo de rotação ao longo do eixo de rotação v = (dx, dy, dz)
4.11 Quaternions (A19)
146
Introduction
• Quaternions are commonly used to represent rotations
• They were introduced by William Hamilton (1805-1865) [1]
147
Hamilton (1805-1865) [1]• Quaternions were conceived as Geometrical Operators
• A Complete Calculus of Quaternions was introduced by Hamilton [2]
Definition of Vector
• It is a line segment with orientation• It represents the relative position of two points– Example: point N with respect to M
148
– Example: point N with respect to M
M
N
Hamilton’s Motivation for Quaternions
• Create a Mathematical Concept to represent
– RELATIONSHIP between two VECTORS
149
– Similar to the way a Vector represents
• RELATIONSHIP between two POINTS
Vector applied to Point
• Given – Point M and
– Vector V
• Application of V
M
V
150
• Application of Vover M results in
– Unique Point N
N
M V
Quaternion applied to Vector
• Hamilton wanted that given– Vector V and– Quaternion Q
V
Q
151
– Quaternion Q
• Application of Q over V results in – Unique VectorW Q
V W
Quatenion Rationale
• Vector is completely defined by– Length– Orientation
• To define a vector in terms of another
152
• To define a vector in terms of another vector ���� a Quaternion has to represent– Relative Length– Relative Orientation
Definition of Scalar
• Scale – RATIO between the lengths of two PARALLEL vectors A and B
153
– RELATIVE LENGTH of vectors
AB
s = Scale
Scalar - Vector Operations
• S is the Quotient between two
PARALLEL vectors A and BB
A=S
BBA
BA sS ==◊=
154
• A Scalar is an Operator that
– Changes the SCALE of the vector
– Keeps its orientation unchanged
BBB
BA sS ==◊=
Definition of Versor
• Versor – QUOCIENT between two NON-PARALLELvectors A and B of EQUAL LENGTH
A
155
– RELATIVE ORIENTATION of vectors
A
B
Versor - Vector Operations
• V is the Geometric Quotient between
two NON-PARALLEL vectors of EQUAL
LENGTH A and B
B
A=V
156
• A Versor is an Operator that
– Changes the ORIENTATION of the vector
– Keeps its LENGTH unchanged
BA ◊= V
Right Versors
• A Right Versor is a Versor that applies a 90o rotation
• Vector length is left unchanged as in any other Versor application
157
any other Versor application
A
B
V
Composing Versors
• Versor composition is the consecutive application of two versors operators
158
A
B
V2
V1
C
V3
123
312
1
2
VVV
VVV
V
V
◊=◊=◊◊=
◊=◊=
CCA
CB
BA
Composing Right Versors
A
B
V
- B
VV
VVV
V
◊=−◊◊=◊=−
◊=
1
BAB
BA
159
• (-1) is the INVERSION operator– Double application of a right versor to a vector
– Inverts the direction of a vector
BVV◊=−1
Definition of Quaternion
• Geometrical Quotient of two vectors A and B
BAB
A◊=⇔= QQ
160
• Operating on a vector, changes its
– ORIENTATION – LENGTH
B
Quaternion Characteristics
• Axis(Q) = Unit Vector perpendicular to the plane of rotation
• Angle(Q) = Angle between the vectors in the quotient
161
the quotient
• Index(Q) = In a Right Quaternion is the Axis(Q) multiplied by the
length ratio of the two vectors in the quotient
Representation of Quaternions
• Quaternion = “A set of Four”• From
– the Latin Quaternio– the Greek τετρακτυς (ΤΕΤΡΑΚΤΥΣ)τετρακτυς (ΤΕΤΡΑΚΤΥΣ)τετρακτυς (ΤΕΤΡΑΚΤΥΣ)τετρακτυς (ΤΕΤΡΑΚΤΥΣ)
• The combined operation of Scalar and Versor
162
• The combined operation of Scalar and Versor requires 4 numbers:– 1 for Scale– 1 for Angle– 2 for Orientation (common plane)
• Quaternion = Scalar ���� Versor
Opposite Quaternions
• The quaternion Q • has an Opposite quaternion O (Q)
B
A=Q ( ) QQO −=
−=
B
A
163
B=Q ( ) QQO −==
B
A- A
B
Q
O(Q)
Opposite Quaternion Properties
))(()(
))(()(
QOAxisQAxis
QOAngleQAngle
−==+ π
164
Q
O(Q)
Reciprocal Quaternions
• The quaternion Q:
• Reciprocal of Q:• Composition
BAB
A◊=⇒= QQ
ABA
B◊=⇒== −− 11)( QQQR
165
• Composition
(1) is an Identity Operator
A
B
QR(Q)
1=◊QQR )(
Conjugate Quaternion
• Given – Vectors A and B and– Quotient Q=A/B
• Geometric reflection of vector B over
166
• Geometric reflection of vector B over vector A will be vector C
BAB
A◊=⇒= QQC BA
QK(Q)
Conjugate Quaternion
• Conjugate Quaternion K(Q)=A/C
– Angle (K(Q)) = Angle (Q)
167
– Axis (K(Q)) = - Axis (Q)
CAC
A◊=⇒= )()( QKQKC BA
QK(Q)
Norm of a Quaternion
• The Norm is the composition of a Quaternion with its Conjugate– The rotation of K(Q) compensates the rotation of Q
168
– Producing a parallel vector– N(Q) is a scalar operator
C
BA
QK(Q)
BBC
B
A
B
A
A
C
B
C
◊◊=◊=
===
QQKQN
QN
)()(
)(
2
Square of a Quaternion
• Defined as applying Q twice
BA
C
B
B
A
C
A
◊◊=◊=
==Q2
169
CQQ
Q2CCA ◊◊=◊= QQQ2
Composing Right Quaternions
• Succesive application of a Right Quaternion over a Vector– results in a Vector in the opposite direction
170
A- A
B
AC
B
Composing Right Quaternions
• The square of any right quaternion is a NEGATIVE scalar operator
B B
171
A- A
AC
)(
1
2
AA
A
A
A
B
◊◊=−
−=−
=
QQ AC
A
B
A
B
A
C
2
22
Q=
−=
=
Versor of a Quaternion
• Versor of a Vector– Unit vector parallel to the vector
• Versor of a Quaternion
AA
AA ˆ)( ==U
172
• Versor of a Quaternion– Quotient of the Versors of the vectors
• It is the part of the Quaternion that represents Relative Orientation
B
A
B
A
B
A
ˆ
ˆ
)(
)()( ==
=U
UUQU
Tensor of a Quaternion
• Tensor of a Vector– Length of the vector
• Tensor of a Quaternion
AA =)(T
173
• Tensor of a Quaternion– Quotient of the Tensors of the vectors
• It is the part of the Quaternion that represents Relative Scale
B
A
B
A
B
A==
=)(
)()(
T
TTQT
Tensor and Versor of a Quaternion
• Versor operator
– Applies VERSION to a vector
– Changes vector’s orientation
174
• Tensor operator
– Applies TENSION to a vector
– Stretches the vector and change its length
Tensor and Versor of a Quaternion
• Vector decomposed in Versor and
Tensor parts
AAAAA ˆ)()( ◊=◊= UT
175
• Quaternion decomposed in Versor and
Tensor parts
AAAAA )()( ◊=◊= UT
)(
)(
)(
)()()(
B
A
B
A
U
U
T
TQUQTQ ◊=◊=
Vector - Arcs
• Versors represented on the surface of a unit sphere
• Versor V moves point B to
176
• Versor V moves point B to point A
• Minimum Arc joining points B and A is defined as Vector-Arc
Sliding Vector - Arcs
• Vectors can be translated on a plane• Vector arcs can freely slide along the great circle and still represent the SAME Versor
177
SAME Versor
Composition of Biplanar Versors
178
Multiplication and Division of Biplanar Versor
• Spherical Triangle ABC– Used to define versor operations– Analogous to parallelogram rule for vectors
179
Multiplication and Division of Biplanar Versor
• Multiplication of Versors– like the sum of vectors
• Division of VersorsCBBACA VVV =
180
• Division of Versors– like the difference of vectors
B
A
B
C
C
A
C
BC
A
====CB
CABA
V
VV
Versor Composition is Non-Commutative
• VAC = VBCVAB ≠≠≠≠≠≠≠≠ VABVBC = VBA’VC’B = VC’A’
• Versors VAC and VC’ A’ have– Same angle
181
– Same angle – Different axes (different planes)
• Multiplication of two orthogonal Right Versors produce a Right Versor orthogonal to them
Composition of two Orthogonal Right Versors
VVV =A
182
• When order is reversedCACBBA VVV =
CABACB VVV −= C B
Square of Elementary Versors
• The Square of an operator is the operator applied twice
• The square of Right Versors is always the (-1) Operator
183
the (-1) Operator
Elementary Versors
184
Index of Right Quaternions
• Is the Axis of the quaternion Scaled by the ratio of lengths
185
Sum of Versors
• Versors are Quotients– They can be summed ONLY when they have a COMMON DENOMINATOR
– A Common Denominator can ALWAYS be
186
– A Common Denominator can ALWAYS be found
Getting a Common Denominator
187
Getting a Common Denominator
• Slide both versors along their great circles until their origins coincide
• The vector B’ in the intersection is the common denominator
188
common denominator
Geometrical Interpretation of the Sum
• As with Vectors 1) Get a common denominator SLIDING
both Vector-Arcs to a common origin 2) Add the two vectors in the numerator
189
2) Add the two vectors in the numerator3) Get the new Quotient
Sum of two Right Versors
• It is always a right quaternion• Its plane BISECTS those of the original two versors
• and has a Scalar characteristic > 1
190
• and has a Scalar characteristic > 1
Sum of two Right Versors
• Index of resulting Versor = sum of indices of two versors
191
Multiplying a Right Versor by a Scalar
• Multiplication by a Scalar– Affects only Scalar part of the Right Versor–Modifies the length ratio of the vectors in the Quotient
192
the Quotient
Right Versor in terms of Orthogonal Right Versor
• If the Orthogonal Right Versors i, j, k are multiplied by Scalars x, y, z
• Their sum will be a Right Versor whose axis has (x, y, z) as components
193
axis has (x, y, z) as components
Scalar and Right Parts of Quaternions
• A Quaternion operator applied to a vector B
• performs an operation that produces another vector A
194
another vector A
B
A
Q
Scalar and Right Parts of Quaternions
• The new vector A can be expressed as a sum of two orthogonal vectorsA = BS + BR
–B parallel to B and A
BR
195
–BS parallel to B and
–BR orthogonal to B
B
Q
BS
BR
Scalar and Right Parts of Quaternions
• Apply Scalar operator to B – Obtain BS
• Apply Right quaternion to B– Obtain BR
196
B
A
BS B
A
Q
BR
Tensor and Versor Part of a Quaternion
• Same operation can be decomposed in Tensor and Versor Operators
197
BBT ◊= T TBA ◊= V
Scalar and Right versus Tensor and Versor
• Scalar and Right parts are
representations in rectangular
coordinates
198
coordinates
• Tensor and Versor parts are
representations in polar coordinates
Quaternions as Four Coefficients
• Let L be the Ratio of lengths between
vectors A and B
• Thus, the scalar factor S isB
A=L
199
• Thus, the scalar factor S is
)cos(
)cos(
θ
θ
LS
S
=
==B
A
B
BS
B
A
θθθθ
BS
BR
Quaternions as Four Coefficients
• Let L be the Ratio of lengths between
vectors A and B
• Thus, the Tensor of the Right partB
A=L
200
• Thus, the Tensor of the Right part
)sin(
)sin(
θ
θ
LR
R
=
==B
A
B
BR
B
A
θθθθ
BS
BR
Quaternions as Four Coefficients
• Then, the Quaternion Q can be written as
Q = x i +y j +z k +w
)cos(θLw =
201
• w (real) is Scalar part
• (x i +y j +z k) is the Right part
)sin(
)cos(
222 θ
θ
Lzyx
Lw
=++
=
Product of Quaternions
• Two quaternions Q1 and Q2 are composed by
202
• That is equivalent to
Product of Quaternions
• Consider the composition
Q = Q1 ◊◊◊◊ Q2
203
– Tensor T(Q)=T(Q1)T(Q2)
– Versor U(Q) = U(Q1) ◊◊◊◊ U(Q2)
Representation by four coefficients
• Let the representation of P and Q be
• Their composition P ◊◊◊◊ Q is
204
• Their composition P ◊◊◊◊ Q is
Representation by four coefficients
• Let the representation of P and Q be
• Their composition P ◊◊◊◊ Q is
205
• Their composition P ◊◊◊◊ Q is
Rotating a Vector (Finally !!)
• A Quaternion q = (x, y, z, w) rotates a Vector v by using the productv’ = q ◊◊◊◊ v ◊◊◊◊ q-1 = q ◊◊◊◊ (v ◊◊◊◊ q-1 )
• Which can be reduced to a Matrix-
206
• Which can be reduced to a Matrix-Vector multiplication L(q) R(q-1)v
( ) ( )( ) ( ) ( )( ) ( ) ( )
( )
++++−−+−
+−++−+
2222
2222
2222
2222
zyxw000
0zyxw2wx2yz2wy2xz
02wx-2yzz-yxw2wz2xy
02wy2xz2wz2xyz-y-xw
Quaternion Algebra
• Consider quaternions
),(
),(
1111111
0000000
v
v
wkzjyixwQ
wkzjyixwQ
=+++==+++=
207
• Sum and Subtraction of quaternions
( ) ( ) ( ) ( )( )101010
1010101010
, vv ±±=±±+±+±+±=±
wwQQ
kzzjyyixxwwQQ
Quaternion Algebra
• Multiplications of primitive elements
kjiij
kji
=−=−=== 1222
208
jikki
ikjjk
kjiij
=−==−=
=−=
Quaternion Algebra
• Multiplication of quaternions( )( )
( )( )( )
10101010
1111000010
−+++++−=
++++++=
iyzzywxxw
zzyyxxww
kzjyixwkzjyixwQQ
209
( )( )( )( )( )100110101010
10101010
10101010
10101010
, vvvvvv ×++⋅−=−+++−+++−+++
wwwwQQ
kzxxzwzzw
jzxxzwyyw
iyzzywxxw
Quaternion Algebra
• Conjugate of quaternions
( )( )
**
zkyjxiw
zkyjxiwQ)(QK
−−−=+++==
210
( )( )( ) *
1
*
2
*
2121
**
)(
Q))((
zkyjxiw
QQQQQQK
QQKK
==
==
−−−=
Quaternion Algebra
• Norm of quaternions
( )zyxw
zkyjxiw)(2222
NQN
+++=+++=
211
( ))()()(
)(Q))((
zyxw
2121
*
QNQNQQN
QNNQKN
===
+++=
Quaternion Algebra
• The multiplicative inverse, Q-1
*1
11 1
−
−−
=
==
QQQQ
212
( )( ) 1
1
1
2
1
21
11
1
)(
−−−
−−
−
=
=
=
QQQQ
QN
Quaternion Algebra
• The Selection function, W(Q)
( )( ) 2/)(
)(*
QQQW
wzkyjxiwWQW
+==+++=
213
• Dot product of two quaternions
( ) 2/)( QQQW +=
( )*
10
1010101010
QQW
zzyyxxwwQQ
=+++=⋅
Quaternion Algebra
• Unit quaternion has N(Q)=1• Represented by
)sin()cos( += uQ θθ
214
( )product Quaternion - 1
1,,
−=
=
++=
uu
u
zyx
zyx
uuu
kujuiu
Quaternion Algebra
• Extension of Euler’s identity
• Power of a unit quaternion
)sin()cos()exp( θθθ uu +=
215
)sin()cos(
)exp())sin()(cos(
θθθθθ
ttQ
tQ
t
tt
u
uu
+=
=+=
Quaternion Algebra
• Extension of Euler’s identity
• Logarithm of a unit quaternion
)sin()cos()exp( θθθ uu +=
θθ u+= ))sin()log(cos()log(Q
216
• Non-commutativity of quaternion
multiplication disallows log and exp
identities
θθθθ
uu
u
==+=))log(exp()log(
))sin()log(cos()log(
Q
Q
Rotation around an axis
uz
y
xv
v’
u××××v
v’⊥⊥⊥⊥
v//
θθθθ
217
v// = Pu(v) = Pu(v)u = (v.u)uv⊥⊥⊥⊥ = v - v// = v - (v.u)uu××××v = |v⊥⊥⊥⊥|u⊥⊥⊥⊥(Plano de u e v)
|v⊥⊥⊥⊥|= | u××××v | = |v’⊥⊥⊥⊥|v’⊥⊥⊥⊥ = |v’⊥⊥⊥⊥|cosθθθθuv⊥⊥⊥⊥ +|v’⊥⊥⊥⊥|senθθθθuu××××v
= (v - (v.u)u) cosθθθθ + u××××v senθθθθ
z
v⊥⊥⊥⊥
v//
Plane perpendicular to the direction of u
• Decomposition of Rotated vector
Rotation around an axis
)sin()()cos())(()(
'' //
θθ vuuuvvuuv
vvv
×+⋅−+⋅=+= ⊥
218
)sin()())cos(1)()(()cos( θθθ vuuuvv ×+−⋅+=
• Rotation using a unit quaternionQ=cos(θθθθ)+u sin(θθθθ)
• Vector v is rotated of 2θ θ θ θ about the axis defined by the unit vector u
Rotation around an axis
219
defined by the unit vector u
*)(' QQR vvv ==
• Conditions to prove
– v’ is a 3D vectorW(v’) = 0
– R is a length preserving operator
Rotation around an axis
220
– R is a length preserving operatorN(v’) = N(v)
– R is a linear operatorR(ααααv + w) = ααααR(v) + R(w)
– R(u) = u
Rotation around an axis
• u, v, w are orthonormal 3D vectorsu
v
w
221
• u, v, w are orthonormal 3D vectors
• Suppose v is rotated by φφφφ with the unit
quaternion of axis u
v’=qvq* ���� v.v’=cos(φφφφ)
[ ][ ]))sin()cos())(sin()cos((
))sin()(cos())sin()(cos(
)()()cos( ***
θθθθθθθθ
φ
vuvvuv
uvuv
vvvv
−−−=−+−=
=⋅=
W
W
qqWqq
Rotation around an axis
222
( )[ ])cos()sin()()sin()cos(
)sin()cos()sin(
)cos()sin()cos(
22
22
222
θθθθ
θθθ
θθθ
vuvu
vuvuv
uvv
+−−=
+−
−+−=
W
W
Rotation around an axis
uuwvvuv
wvu
=−−=−=−=
)(
[ ])cos()sin(2)sin()cos()cos( 22 θθθθφ −−= uW
223
• Therefore φφφφ = 2θθθθ
[ ])2cos()sin()cos(
)cos()sin(2)sin()cos()cos(
22 θθθ
θθθθφ
=−=
−−= uW
top related