7.4 Transformações

Nesta seção definiremos as matrizes de transformação em coordenadas homogêneas que correspondem às principais transformações afins utilizadas no pipeline de renderização.

Identidade

A transformação de identidade é a transformação que mapeia um ponto a ele mesmo:

p=p.

É representada por uma matriz identidade:

I=[1000010000100001]. Assim,

p=Ip=p.

Translação

Translação é a transformação afim de deslocamento de um ponto p por um vetor t:

p=p+t

[xyz1]=[xyz1]+[txtytz0].

A figura 7.2 ilustra o resultado da translação de todos os pontos de um cubo centralizado na origem.

Translação.

Figura 7.2: Translação.

A matriz de translação é definida como

T=T(t)=[100tx010ty001tz0001].

Assim,

p=Tp

[x+txy+tyz+tz1]=[100tx010ty001tz0001][xyz1].

A inversa da translação é o deslocamento de p no sentido inverso do vetor de deslocamento:

T1(t)=T(t).

Note que a transformação de translação não altera o formato do objeto. O objeto deslocado continua com as mesmas proporções. Uma transformação que, como a translação, preserva a distância entre todos os pontos do objeto transformado, é chamada de transformação de corpo rígido.

Escala

A escala é um tipo de transformação linear que faz com que um objeto aumente ou diminua de tamanho de acordo com fatores de escala em x, y e z. Desse modo, a escala não é uma transformação de corpo rígido.

A transformação de escala é obtida multiplicando cada coordenada (x,y,z) de um ponto p pelos escalares (sx,sy,sz):

x=sxxy=syyz=szz.

Se os fatores de escala forem todos iguais (sx=sy=sz), temos uma escala uniforme pois o objeto é redimensionado por igual em todas direções. A figura 7.3 ilustra o resultado da escala uniforme de cada ponto de um cubo centralizado na origem. Como sx=sy=sz=2, o objeto dobra de tamanho em cada dimensão.

Escala uniforme sobre um objeto centralizado na origem.

Figura 7.3: Escala uniforme sobre um objeto centralizado na origem.

A origem do frame é o ponto fixo da transformação, isto é, é o ponto que não é afetado pela escala. Observe, na figura 7.4, a escala uniforme de um cubo que não está centralizado na origem. O vértice que coincide com a origem é o único ponto que permanece inalterado. Pontos na origem continuam na origem após a escala.

Escala uniforme sobre um objeto não centralizado na origem.

Figura 7.4: Escala uniforme sobre um objeto não centralizado na origem.

Antes da aplicação da transformação de escala, é frequentemente desejável centralizar o objeto na origem ou fazer com que pelo menos a base do objeto fique centralizada na origem, como no modelo mostrado na figura 7.5.

Escala em objeto com base centralizada na origem.

Figura 7.5: Escala em objeto com base centralizada na origem.

Se o objeto não estiver centralizado na origem, a escala poderá deslocar o objeto de forma indireta. Por exemplo, se um cubo unitário estiver centralizado no ponto (10,10,10), a escala com sx=sy=sz=2 dobrará o tamanho do cubo em cada dimensão, como esperado. Porém, o cubo agora estará centralizado no ponto (20,20,20), o que provavelmente não é o que se quer.

Se os fatores de escala estão no intervalo [0,1), o objeto diminui de tamanho. A figura 7.6 mostra o resultado de uma escala uniforme que diminui o tamanho do objeto. Como sx=sy=sz=0.5, o objeto resultante tem 50% do tamanho original em cada dimensão.

Escala uniforme com fatores de escala menores que 1.

Figura 7.6: Escala uniforme com fatores de escala menores que 1.

Se os fatores de escala não são iguais, o resultado é uma escala não uniforme. Na figura 7.7, o cubo triplica de tamanho na direção x (sx=3), mantém o tamanho na direção y (sy=1), e diminui o tamanho pela metade em z (sz=0.5).

Escala não uniforme.

Figura 7.7: Escala não uniforme.

Em resumo, se s é um fator de escala (sx, sy ou sz):

  • 0s<1 faz o objeto diminuir de tamanho na direção correspondente.
  • s=1 mantém o tamanho do objeto.
  • s>1 faz o objeto aumentar de tamanho na direção correspondente.

Se o sinal de s é negativo, o resultado é uma reflexão na direção correspondente. A figura 7.8 ilustra o resultado da reflexão em x e y sem alteração do tamanho do objeto (|s|=1).

Reflexão.

Figura 7.8: Reflexão.

A matriz de escala é definida como

S=S(sx,sy,sz)=[sx0000sy0000sz00001].

Assim,

p=Sp

[sxxsyyszz1]=[sx0000sy0000sz00001][xyz1].

A inversa é a escala pelo valor recíproco dos fatores de escala:

S1(sx,sy,sz)=S(1sx,1sy,1sz)

Assim, se um objeto teve seu tamanho dobrado (s=2), para voltar ao tamanho original devemos diminuir seu tamanho pela metade (s=1/2=0.5).

Rotação

A rotação é um tipo de transformação linear que produz uma movimentação radial em torno de um ponto ou eixo de rotação. A rotação é uma transformação de corpo rígido, pois não altera as distâncias entre os pontos do objeto rodado.

Para simplificar, vamos primeiramente definir uma rotação no plano cartesiano e depois estender o conceito para o espaço tridimensional.

Um ponto P=(x,y) é rodado em torno da origem por um ângulo θ no sentido anti-horário, resultando em um ponto P=(x,y) como mostra a figura 7.9.

Rotação no plano.

Figura 7.9: Rotação no plano.

Podemos determinar a transformação que leva P a P através da representação dos pontos em coordenadas polares:

x=rcosϕ,y=rsinϕ,x=rcos(ϕ+θ),y=rsin(ϕ+θ). Usando a soma de cossenos,

x=rcos(ϕ+θ)=rcosϕcosθrsinϕsinθ,y=rsin(ϕ+θ)=rsinϕcosθ+rcosϕsinθ.

Substituindo por x e y, obtemos o resultado:

x=xcosθysinθ,y=ycosθ+xsinθ.

Em notação matricial:

[xy]=[cosθsinθsinθcosθ][xy]. A matriz

R(θ)=[cosθsinθsinθcosθ]

representa a transformação de rotação em torno da origem por um ângulo θ no sentido anti-horário.

Rotação 3D

No espaço tridimensional, a rotação ocorre em torno de um eixo de referência.

Vamos derivar as transformações de rotação em torno dos três eixos do sistema de coordenadas cartesiano orientado segundo a regra da mão direita (figura 7.10).

Sistema de coordenadas baseado na regra da mão direita.

Figura 7.10: Sistema de coordenadas baseado na regra da mão direita.

Um ponto P=(x,y,z) é rodado em torno do eixo z por um ângulo θ no sentido anti-horário, resultando em um ponto P=(x,y,z), como mostra a figura 7.11.

Rotação em torno de $z$.

Figura 7.11: Rotação em torno de z.

Pela regra da mão direita, é como se o eixo z positivo na figura 7.11 estivesse saindo da tela. Assim, as coordenadas x e y mudam como na rotação 2D, e a coordenação z não é modificada:

x=xcosθysinθ,y=ycosθ+xsinθ,z=z.

A figura 7.12 ilustra o resultado da rotação em π/6 radianos (30) em torno do eixo z, aplicada sobre um cubo centralizado na origem. Como o ângulo é positivo, o objeto é rodado no sentido anti-horário.

Rotação sobre um objeto centralizado na origem.

Figura 7.12: Rotação sobre um objeto centralizado na origem.

A figura 7.13 mostra a rotação em π/6 radianos em torno do eixo z sobre um cubo não centralizado na origem. Observe que todos os pontos ao longo do eixo z permanecem inalterados. De fato, na rotação 3D, todos os pontos ao longo do eixo de rotação são pontos fixos.

Rotação sobre um objeto não centralizado na origem.

Figura 7.13: Rotação sobre um objeto não centralizado na origem.

Podemos obter a rotação em torno dos outros eixos através da substituição cíclica das coordenadas x, y e z nas expressões de rotação em torno de z, segundo a ordem mostrada na figura 7.14.

Ordem cíclica de substituição das coordenadas.

Figura 7.14: Ordem cíclica de substituição das coordenadas.

Assim, a rotação em torno do eixo x resultará em:

y=ycosθzsinθ,z=zcosθ+ysinθ,x=x.

A rotação em torno do eixo y é obtida através de mais uma substituição cíclica das coordenadas nas expressões acima:

z=zcosθxsinθ,x=xcosθ+zsinθ,y=y.

As matrizes de rotação em torno dos eixos x, y e z ficam como a seguir:

Rx(θ)=[10000cosθsinθ00sinθcosθ00001],Ry(θ)=[cosθ0sinθ00100sinθ0cosθ00001],Rz(θ)=[cosθsinθ00sinθcosθ0000100001].

A matriz inversa de uma rotação por um ângulo θ é simplesmente a matriz de rotação pelo mesmo eixo, mas pelo ângulo θ:

Rx(θ)1=Rx(θ),Ry(θ)1=Ry(θ),Rz(θ)1=Rz(θ).

Além disso, as matrizes de rotação são matrizes ortogonais. Desse modo, sua inversa é sua transposta:

Rx(θ)1=Rx(θ)T,Ry(θ)1=Ry(θ)T,Rz(θ)1=Rz(θ)T.