Computação Gráfica
Transformações Geométricas
Prof. Alaor Cervati Neto
2021/2
Renderizamos objetos 2D de forma estática.
Agora forneceremos movimento a nossos objetos.
Transformações geométricas são operações aplicadas na descrição geométrica
dos objetos (vértices).
1 33
Transformações geométricas primárias:
Translação.
Escala.
Rotação.
Transformações geométricas secundárias:
Reflexão.
Cisalhamento.
2 33
Transformações Geométricas 2D
Transformações Geométricas 2D
Coordenadas Homogêneas:
Sistema de coordenadas em geometria projetiva.
Um ponto no espaço 2D é uma projeção de um ponto 3D no plano.
Um ponto 2D em coordenadas homogêneas:
Possui três valores: (xh , yh , h).
Onde h é um parâmetro homogêneo (h ̸= 0).
Por conveniência, usaremos h = 1:
Mantemos as coordenadas Euclidianas.
Obtemos maior poder de representação.
3 33
Translação
Adicionar offsets às coordenadas de um objeto:
4 33
Translação
Considerando uma coordenada (x, y):
Adicionando um offset tx , ty .
Nova coordenada (x′ , y′ ): (
x ′ = x + tx
y′ = y + ty
Notação matricial: P′ = P + T:
′
x x t
P= ,P = ′ ,T = x
′
y y ty
5 33
Translação em Coordenadas Homogêneas
Permite translação com multiplicação de matrizes.
Sejam as coordenadas (x, y, h) e um offset tx , ty .
A nova coordenada é xh′ , yh′ , h :
′
xh 1 0 tx xh
Nova coordenada yh′ = 0 1 ty yh Coordenada original
h 0 0 1 h
| {z }
Matriz de translação
6 33
Translação em Coordenadas Homogêneas
Quando h = 1, voltamos ao sistema de coordenadas cartesiano:
′ ′
xh = (1 · xh + 0 · yh + tx · h) =⇒ xh = xh + tx
yh′ = 0 · xh + 1 · yh + ty · h =⇒ yh′ = yh + ty
h = (0 · xh + 0 · yh + 1 · h) =⇒ h = 1
7 33
Translação em Coordenadas Homogêneas
Portanto, quando h = 1, as coordenadas cartesianas são um caso particular de
coordenadas homogêneas:
P′ = T tx , ty · P
′
x 1 0 tx x
y′ = 0 1 ty y
1 0 0 1 1
8 33
Escala
Altera o tamanho de um objeto por um dado fator:
9 33
Escala
Considerando uma coordenada (x, y):
Fator de escala sx , sy .
Nova coordenada (x′ , y′ ): (
x′ = x · sx
y′ = y · sy
Notação matricial:
P′ = S · P
′
x sx 0 x
=
y′ 0 sy y
10 33
Escala em Coordenadas Homogêneas
P′ = S
sx , sy · P
′
x sx 0 0 x
Nova coordenada ′
y = 0
sy 0 y Coordenada original
1 0 0 1 1
| {z }
Matriz de escala
sx e sy devem ser maiores que zero.
Se sx > 1 e sy > 1 o objeto aumenta.
Se sx < 1 e sy < 1 o objeto diminui.
Se sx = sy a escala é uniforme.
Se sx ̸= sy a escala é diferencial.
11 33
Rotação
Move o objeto ao redor de um eixo em um ângulo:
12 33
Rotação
Rotacionamos (x, y) a partir da origem do sistema de coordenadas:
13 33
Rotação
Considerando uma coordenada (x, y):
O raio r é constante, ϕ é o ângulo original de P = (x, y) e θ é o ângulo de
rotação.
Nova coordenada (x′ , y′ ):
x′
(
cos (ϕ + θ) = r =⇒ x′ = r cos (ϕ + θ)
y′
sen (ϕ + θ) = r =⇒ y′ = r sen (ϕ + θ)
Soma de ângulos:
cos (α + β) = cos α · cos β − sen α · sen β
sen (α + β) = cos α · sen β + sen α · cos β
14 33
Rotação
Portanto: (
x′ = r cos ϕ · cos θ − r sen ϕ · sen θ
y′ = r cos ϕ · sen θ + r sen ϕ · cos θ
Descrevendo P por coordenadas polares:
x = r cos ϕ, y = r sen ϕ
Por substituição: (
x′ = x cos θ − y sen θ
y′ = x sen θ + y cos θ
Na forma matricial:
P′ = R · P
′
x cos θ − sen θ x
=
y′ sen θ cos θ y
15 33
Rotação em Coordenadas Homogêneas
P′ = R (θ) · P
′
x cos θ − sen θ 0 x
Nova coordenada y′ = sen θ cos θ 0 y Coordenada original
1 0 0 1 1
| {z }
Matriz de rotação
16 33
Matriz de Transformação
A grande vantagem de coordenadas homogêneas é que uma sequência de
transformações pode ser representada em uma única matriz:
P ′ = M2 · M1 · P
= (M2 · M1 ) · P
=M·P
A transformação é dada por M em vez de M1 e M2 .
17 33
Escala com ponto de referência
1. Translação do objeto para a origem considerando o ponto de referência xf , yf .
2. Transformação de escala.
3. Translação do objeto para a posição original.
1 2 3
z }| { z }| { z }| {
1 0 xf sx 0 0 1 0 −xf
0 1 yf 0 sy 0 0 1 −yf
0 0 1 0 0 1 0 0 1
sx 0 xf (1 − sx )
= 0 sy yf 1 − sy
0 0 1
| {z }
Matriz de transformação final
18 33
Rotação com ponto de referência
1. Translação do objeto para a origem considerando o ponto de referência xf , yf .
2. Transformação de rotação.
3. Translação do objeto para a posição original.
1 2 3
z }| { z }| { z }| {
1 0 xr cos θ − sen θ 0 1 0 −xr
0 1 yr sen θ cos θ 0 0 1 −yr
0 0 1 0 0 1 0 0 1
cos θ − sen θ xr − xr cos θ + yr sen θ
= sen θ cos θ yr − yr cos θ − xr sen θ
0 0 1
| {z }
Matriz de transformação final
19 33
Em Resumo
Dada uma matriz de transformação qualquer M.
Dadas as coordenadas P.
Novas coordenadas são P′ = M · P.
Simples multiplicação de matrizes.
Podemos gerar transformações compostas a partir de translação, escala e
rotação.
20 33
Entretanto
Multiplicação de matrizes pode não ser comutativa, isto é, M2 · M1 ̸= M1 · M2 :
21 33
Reflexão
1 0 0 −1 0 0 −1 0 0
y = 0 : 0 −1 0 , x = 0 : 0 1 0 , x = 0 e y = 0 : 0 −1 0
0 0 1 0 0 1 0 0 1
22 33
Cisalhamento
Cisalhamento (shearing) na direção de x:
1 shx 0
0 1 0
0 0 1
23 33
Transformações Geométricas 3D
Transformações Geométricas 3D
São extensões de métodos 2D.
Porém incluindo a coordenada z.
São representadas por matrizes 4 × 4.
24 33
Translação
P′ =T·P
′
x 1 0 0 tx x
y′ 0 1 0 ty y
=
z′ 0
0 1 tz z
1 0 0 0 1 1
25 33
Escala
P′ = S · P
′
x sx 0 0 0 x
y′ 0 sy 0 0 y
=
z′ 0 0 sz 0 z
1 0 0 0 1 1
26 33
Rotação
P′ = Rz (θ) · P
′
x cos θ − sen θ 0 0 x
y′ sen θ cos θ 0 0 y
=
z′ 0
0 1 0 z
1 0 0 0 1 1
27 33
Rotação
P′ = Rx (θ) · P
′
x 1 0 0 0 x
y′ 0 cos θ − sen θ 0 y
=
z′ 0 sen θ cos θ 0 z
1 0 0 0 1 1
28 33
Rotação
P′ = Ry (θ) · P
′
x cos θ 0 sen θ 0 x
y′ 0 1 0 0 y
=
z′ − sen θ 0 cos θ 0 z
1 0 0 0 1 1
29 33
Transformações Geométricas em OpenGL
Por padrão, OpenGL trabalha com coordenadas homogêneas em 3D (x, y, z, h).
Para atividades com objetos 2D:
▶ h = 1.
▶ z = 0.
30 33
Material de base para a aula
Transformação Geométrica 3D. Fernando Paulovich. Slides SCC 250 –
Computação Gráfica, 2010.
Hughes, J. F., Van Dam, A., Foley, J. D., McGuire, M., Feiner, S. K., & Sklar, D. F.
(2014). Computer graphics: principles and practice. Terceira Edição. Pearson
Education.
Computação Gráfica: Aulas 03 e 04. Slides de Ricardo M. Marcacini. Disciplina
SCC0250/0650, ICMC/USP, 2021.
31 33
Exercício para cômputo de presença
O objeto TeaPot (também chamado Bule de Newell) é um modelo criado em 1975
por Martin Newell como parte de sua pesquisa em computação gráfica na
Universidade de Utah.
32 33
Exercício para cômputo de presença
Crie um programa (em C/C++, Java ou Python) que modele este objeto (o conjunto
de vértices que o descreve está disponível em
[Link] usando a primitiva
GL_TRIANGLES. Aplique transformações para alterar o objeto de modo a
posicioná-lo da forma que considerar melhor e gere a matriz de transformação
correspondente.
33 / 33