Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Transformações geométricas em CG
1. COMPUTAÇÃO GRÁFICA
Transformações geométricas
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
2. Objetivos
• Entender os princípios da
transformações geométricas do tipo
translação, rotação e escalamento.
• Efetuar transformações geométricas
utilizando coordenadas homogêneas.
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
3. Fundamentos
• Transformações geométricas envolvem
operações com vetores e matrizes, do tipo
soma e multiplicação, além de
conhecimentos básicos de álgebra e
geometria.
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
4. Transformações básicas - OpenGL
• Translação
glTranslatef(dx, dy, dz);
• Escalamento
glScalef(sx, sy, sz);
• Rotação
glRotatef(ang, x, y, z);
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
5. Translação
EXEMPLO 2D
y
posição inicial
posição final
x
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
6. Translação
EXEMPLO 2D
Nova posição da figura para dx = 6 e dy = 2
P5 ’
P3 ’
8
6 P5
P3
P4 ’
4
P4
P1 ’ P2 ’
2
P1 = (1,1) P2 = (6,1)
0
2 4 6 8 10 12 14
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
7. Translação
• É uma operação que desloca pontos em uma
determinada direção. Define-se através da equação:
P’ = P + T
tal que, para o caso 2D
x x' dx
P= y P’ = y’ T= dy
Onde x, y são os pontos originais; x’, y ’ são os pontos
deslocados; e dx, dy correspondem ao deslocamento
nas direções x e y, respectivamente.
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
8. Escala
EXEMPLO 2D
y y
situação inicial
situação final
x x
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
9. Escala
EXEMPLO 2D
Novo objeto para sx = 2
e sy = 2
4
P4 P3
2
6
P1 = (2,1) P2 = (6,1)
0 P4 ’ P3 ’
2 4 6 8
3
Situação inicial
P1’= (4,2) P2’ = (12,2)
0
3 6 9 12
Situação final
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
10. Escala
• Escalamento pode tornar um objeto maior
ou menor. A equação abaixo define essa
operação.
P’ = S · P
tal que, para o caso 2D
x x' sx 0
P= y P’ = y’ S= 0 sy
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
11. Rotação
EXEMPLO 2D
y y
situação inicial situação final
x x
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
12. Rotação
EXEMPLO 2D
Novo objeto para θ =
45º
4 P4 P3
2
P3 ’
P1 = (2,1) P2 = (4,1)
0
2 4 6 8 P4 ’ P2 ’
Situação inicial
2
P1 ’
0
2 4 6
Situação final
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
13. Rotação
• Rotaciona (gira) um objeto de um
determinado ângulo θ. É dada pela equação:
P’ = R · P
tal que, para o caso 2D
x x' cosθ -sinθ
P= y P’ = y’ R=
sinθ cosθ
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
14. Rotação / Escala
• Como pode ser visto nos desenhos
anteriores, as operações de escalamento e
rotação também deslocam o objeto, pois
foram definidas a partir de um ponto na
origem.
• Portanto, para que não ocorra translação
desnecessária no objeto é preciso realizar as
seguintes etapas:
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
15. Rotação / Escala
Objeto que se deseja modificar
1. Transladar o objeto para a origem
2. Rotacionar (ou efetuar o escalamento)
3. Transladar o objeto para a posição original
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
16. Coordenadas homogêneas
• As operações matriciais diferem entre
adição (translação) e multiplicação (rotação-
escala). P’ = P + T
P’ = R · P
P’ = S · P
• Uma forma de tratar as transformações
através da mesma operação é expressar os
pontos em COORDENADAS HOMOGÊNEAS.
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
17. Coordenadas homogêneas
• Todas as transformações são tratadas
através de multiplicações. Portanto, podemos
usar a expressão:
P’ = (R ou S ou T) · P
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
18. Coordenadas homogêneas
• Em coordenadas homogêneas, uma terceira
coordenada é adicionada (caso 2D)
x
P= y
1
E as transformações são escritas na forma:
1 0 dx cosθ -sinθ 0 sx 0 0
T= 0 1 dy R= sinθ cosθ 0 S= 0 sy 0
0 0 1 0 0 1 0 0 1
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
19. Transformações 3D
• Matrizes de transformações para o caso 3D
Translação Escala
1 0 0 dx sx 0 0 0
0 1 0 dy 0 sy 0 0
T= S= 0 0 sz 0
0 0 1 dz
0 0 0 1 0 0 0 1
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
20. Transformações 3D
• Matrizes de transformações para o caso 3D
Rotação y
x
Atenção!!! As rotações foram
z definidas no sentido anti-horário.
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
21. Transformações 3D
• Matrizes de transformações para o caso 3D
Rotação
cosθ -sinθ 0 0 1 0 0 0
sinθ cosθ 0 0 0 cosθ -sinθ 0
Rz (θ) = Rx (θ) =
0 0 1 0 0 sinθ cosθ 0
0 0 0 1 0 0 0 1
cosθ 0 sinθ 0
0 1 0 0
Ry (θ) =
-sinθ 0 cosθ 0
0 0 0 1
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
22. Transformações 3D
• Outras transformações
Cisalhamento Reflexão
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
23. Transformações - OpenGL
• O OpenGL trabalha com matrizes de
transformações
• As operações são efetuadas via
multiplicação de matrizes, de acordo com o
estado existente
• Portanto, é necessário “carregar” a matriz
identidade
glLoadIdentity();
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
24. Transformações - OpenGL
• O OpenGL trabalha com matrizes de
transformações...
Utiliza-se o comando glMatrixMode
glMatrixMode(GL_PROJECTION);
Parâmetro GL_PROJECTION antes dos
comandos que especificam o tipo de
projeção (glOrtho, por exemplo).
glMatrixMode(GL_MODELVIEW);
Parâmetro GL_MODELVIEW antes de
transformações geométricas.
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
25. Transformações - OpenGL
• Uma transformação pode alterar todos os
objetos na sequência: não desejado,
dependendo da aplicação
• OpenGL: escopo das transformações...
São utilizados comando glPushMatrix() e
glPopMatrix() para definir início e fim do bloco
de objetos onde será(ão) efetuada(s) a(s)
transformação(ões).
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
26. Transformações - OpenGL
• OpenGL: escopo das transformações...
glRotatef(...);
glPushMatrix ();
Objeto1
glPushMatrix ();
glPopMatrix ();
glRotatef(...);
Objeto2
Objeto1
glPopMatrix ();
Objeto2
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009
28. Para saber mais:
[MANSSOUR06] Capítulo 9
[ANGEL97] Capítulo 4
Executar programas do Nate Robins
MARCO ANTONIO GARCIA DE CARVALHO Computação Gráfica
Fevereiro de 2009