Conteúdos da cadeira

Transformações geométricas 2D e 3D

Translação, escala e rotação em coordenadas homogéneas, composição e câmara.

Markdown

Perguntar sobre esta página

ChatGPTClaudePerplexityGeminiCopiar e abrir

Envia o link e pede à IA para ler a página. No Gemini, cola a pergunta copiada.

Ver pergunta para copiar
Nesta página

Mover um objeto na cena é multiplicar os seus vértices por uma matriz. Rodar a câmara é multiplicar por outra. As transformações geométricas são o vocabulário com que se diz onde está cada coisa e para onde olha a câmara. Se dominares a composição de matrizes, metade dos exercícios da cadeira passam a ser multiplicações que já sabes fazer.

Coordenadas homogéneas

A translação não é linear: somar (tx,ty)(t_x, t_y) a um ponto não se escreve como produto por uma matriz 2×22 \times 2. A solução é acrescentar uma coordenada e trabalhar em coordenadas homogéneas: o ponto 2D (x,y)(x, y) passa a (x,y,1)(x, y, 1) e o ponto 3D (x,y,z)(x, y, z) passa a (x,y,z,1)(x, y, z, 1). Com esta coordenada extra, translação, escala e rotação escrevem-se todas como produtos por matrizes, e compor transformações é multiplicar matrizes. No fim divide-se pela última coordenada para voltar ao espaço original. Revê o produto de matrizes se a multiplicação já não sair automática, porque a ordem vai importar.

As três transformações básicas em 2D, aplicadas a vetores coluna, são:

T(tx,ty)=[10tx01ty001],S(sx,sy)=[sx000sy0001],R(θ)=[cosθsinθ0sinθcosθ0001].T(t_x, t_y) = \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix}, \qquad S(s_x, s_y) = \begin{bmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & 1 \end{bmatrix}, \qquad R(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix}.

Em 3D as matrizes são 4×44 \times 4 com a mesma estrutura: a translação ocupa a última coluna, a escala a diagonal e a rotação um bloco 3×33 \times 3. Rotações em 3D fazem-se eixo a eixo, e cada eixo tem a sua matriz.

A ordem muda o resultado

Com vetores coluna, a matriz da direita aplica-se primeiro: em M=TRSM = T \cdot R \cdot S, o ponto sofre primeiro a escala SS, depois a rotação RR e por fim a translação TT. Trocar a ordem dá outro movimento. Esta é a armadilha clássica: “rodar e depois mover” não é “mover e depois rodar”.

Toma o ponto P=(1,0,0)P = (1, 0, 0), a escala uniforme SS de fator 2, a rotação RR de 90°90° sobre zz e a translação TT de (1,0,0)(1, 0, 0):

S=[2000020000200001],R=[0100100000100001],T=[1001010000100001].S = \begin{bmatrix} 2 & 0 & 0 & 0 \\ 0 & 2 & 0 & 0 \\ 0 & 0 & 2 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}, \quad R = \begin{bmatrix} 0 & -1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}, \quad T = \begin{bmatrix} 1 & 0 & 0 & 1 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}.

Com M=TRSM = T \cdot R \cdot S, o ponto escala primeiro para (2,0,0)(2, 0, 0), roda para (0,2,0)(0, 2, 0) e translada para (1,2,0)(1, 2, 0). Podes confirmar multiplicando a matriz composta:

M=TRS=[0201200000200001],M[1001]=[1201].M = T \cdot R \cdot S = \begin{bmatrix} 0 & -2 & 0 & 1 \\ 2 & 0 & 0 & 0 \\ 0 & 0 & 2 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}, \qquad M \cdot \begin{bmatrix} 1 \\ 0 \\ 0 \\ 1 \end{bmatrix} = \begin{bmatrix} 1 \\ 2 \\ 0 \\ 1 \end{bmatrix}.

Com a ordem trocada, M=SRTM' = S \cdot R \cdot T, o ponto translada primeiro para (2,0,0)(2, 0, 0), roda para (0,2,0)(0, 2, 0) e escala para (0,4,0)(0, 4, 0). Mesmo ingredientes, destino diferente. Quando o enunciado disser “roda o objeto sobre si próprio e depois coloca-o na posição”, a rotação fica à direita e a translação à esquerda.

Instancing e câmara

A composição também serve para reutilizar geometria: defines um modelo uma vez e desenhas várias cópias com matrizes de modelação diferentes. A isto chama-se instancing, e é como se enche uma cena de árvores ou cadeiras sem duplicar vértices.

A transformação de vista é a mesma ideia ao contrário: em vez de mover a câmara pelo mundo, move-se o mundo para a frente da câmara com a matriz inversa do seu posicionamento. Uma câmara na posição CC a olhar para o ponto AA constrói-se com uma base ortonormal (direita, cima, frente) que roda o mundo, seguida da translação por C-C. Rotações, projeções e composição enquanto aplicações lineares estão explicadas nas aplicações lineares.

Ver o ficheiro no GitHub

À tua maneira

Escolhe como preferes ler.

Aparência
Ajustar cores e largura
Cor de destaque do tema FEUP
Tipo de letra

Álgebra, lógica e uma ideia de cada vez.

As tuas escolhas ficam guardadas neste navegador.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.