Computação Gráfica Rodrigo Toledo Transformações Geométricas Índice • • • • • • Exemplos de Transformações 2D Fórmulas e cálculos das transformações 2D Usando matriz de transformação (por que?) Coordenadas Homogêneas Concatenação de transformações Transformações 3D Exemplos de Transformações 2D • Translação • Escala – uniforme – não uniforme • Rebatimento por um eixo (espelhamento) • Troca de eixos • Rotação pela origem Translação Translation of a point is simply vector addition y -2 P2 = P1 + -1 P1 P2 x 1 2 = 3 3 -2 + -1 Escala Scaling about the origin is scalar multiplication y 2 2 P2 1 =2* 1 P1 x P2 = P1 * 2 Rebatimento por um eixo (espelhamento) x=x y = -y Troca de Eixos x=y y=x Rotação pela Origem y P´ = q x´ y´ P = x y x x´ = x.cos q - y.sen q y´ = x.sen q + y.cos q Por que usar Matriz nas Transformações? • Todas as transformações podem ser efetuadas através da multiplicação de matrizes (usando coordenadas homogêneas). • As transformações podem ser aninhadas e resolvidas de modo a haver apenas uma matriz de multiplicação a ser aplicada. • A característica descrita acima se torna muito importante quando a mesma seqüência de transformações deve ser aplicada para diversos pontos. Multiplicação de Matrizes x’ a = y’ c onde: x’ = a x + b y y’ = c x + d y b d x y Uniform Scaling s S= 0 0 , s s 0 1 I= 0 0 , 1 x P = , y M=SP 0 x s x = s y s y M = s I P, x M=s y Non-uniform Scaling s1 S = 0 M=SP 0 s2 x P= y s 1 0 0 x s 1 = s2 y s2 Note orientation shift in line x y Non-uniform Scaling y P = x y P´ = x´ y´ Redução (0< sx <1) , Aumento (sy >1) = x x´ y´ sx 0 0 sy x y Flip an Axis... x 1 = -y 0 0 x -1 y What does this do to appearance of objects? Swap Axes y 0 = x 1 1 x 0 y Rotate by q cos( q ) M = R P, R = sin( q ) cos( q ) x - sin( q ) y = sin( q ) x + cos( q ) y q -sin( q ) , P = cos( q ) cos( q ) sin( q ) x y -sin( q ) x cos( q ) y Transformações Geométricas (Translação) y P’ t P = P’ = tx x’ y’ = x y + tx ty ty x x´ = y´ x´ y´ = ? ? 1 0 x ? ? 0 1 Não pode ser escrito na forma y x y + tx ty Ruim para implementação Vantagens das coordenadas homogêneas (Translação) w y x t w=1 yh xh P’ = x’ y’ x’ = y’ = 1 1 0 tx x 0 1 ty y 0 0 1 1 [T] Matriz de Translação Coordenadas homogêneas y P P = x wx x D = y D wy = y x = xh /w w w>0 y = yh /w w yh = w 1 x xh y x Ex.: w=1 yh 3 2 xh 6 3 D = 2 1 D = 4 2 9 = 6 3 Vantagens das coordenadas homogêneas (pontos no infinito) w H1 w 2 u = y x 3 H2 = C2 C1 w=1 C3 H3 u w=1 yh uh xh 2 3 0 = ? ? uh H1 H2 H3 H4 2 2 2 2 3 3 3 3 2 1 1/2 1/4 C1 C2 C3 C4 1 2 4 8 1.5 3 6 12 2 ... 3 0 infinito na direção (2,3) Vantagens das coordenadas homogêneas (pontos no infinito, exemplo) D y A 1 1 O 2 3 0 -2 0 1 0 1 0 0 y A’ 1 O’ x infinito -1 D’ 1 -1 2 B’ B x C’ C 3 0 -2 1 0 1 0 1 1 0 0 1 3 0 -2 1 0 1 0 -1 1 0 0 1 3 0 -2 2 0 1 0 2 1 1 0 0 1 2 1 1 3 0 -2 2 4 2 0 1 0 -2 1 0 0 1 1 = = 1 -1 1 J J 4 = = 2 -2 2 2 = = 1 -1 1 J J x y y x Efeito de profundidade Simplificação da projeção cônica Projeção cônica Projeção ortográfica eye plano de projeção direção de projeção plano de projeção Concatenação y a y y0 y0 x x0 y x0 1 0 - x 0 0 1 - y 0 0 0 1 y cos a sin a 0 - sin a cos a 0 0 0 1 1 0 x 0 0 1 y 0 0 0 1 a x x ' 1 y ' = 0 1 0 0 1 0 x x x0 cos a y0 sin a 1 0 - sin a cos a 0 0 1 0 0 1 0 0 1 0 - x0 x - y0 y 1 1 Concatenação de Transformações y y x y x T1 y T2 x y x R1 y R2 E x x P’= T2 R2 E R1 T1 P Composição com sistema local/móvel Y Y P X = T P1 = Y P1= T P e P2 = R P1 Y Y = Y X1 X Y R P3 = X P3= R P e P2 = T’ P3 P2 = R T R-1 R P X3 Y2 X P2 = R T P T’ Y P2 Y3 X X2 R Y1 X X P P2 = T’ = R T R-1 ou X P2 = R T P = X2 Y2 Geometria Projetiva e Coordenadas Homogêneas em 3D P’ y P xh yh zh w x z P’ = = x’ xh /w y’ = yh/w z’ zh/w m11 m21 m31 m41 m12 m22 m32 m42 m13 m23 m33 m43 m14 m24 m34 m44 x y z 1 P= x y z Transformações em 3D (translações e escalas) y x z x’ 1 0 0 tx x y’ 0 1 0 ty y 0 0 1 tz z 1 0 0 0 1 1 x’ sx 0 0 0 x y’ 0 sy 0 0 y 0 0 sz 0 z 0 0 0 1 1 z’ z’ 1 = = Transformações em 3D (Rotações) y z 1 0 0 0 x y’ 0 cos qx 0 y 0 sen qx -sen qx cos qx 0 z 1 0 0 0 1 1 x’ cos qy 0 0 0 x 0 y -sen qy 0 0 0 cos qy 0 z 0 0 1 1 0 0 x 0 1 0 y 0 z 0 1 1 z’ qy qz x’ qx = x y’ z’ = 1 x’ cos qz y’ sen qx z’ 1 = 0 0 sen qy 1 -sen qx cos qx 0 0 Transformações em 3D (rotação em torno de um eixo qualquer) x’ m11 y’ m21 z’ z = 1 m12 m13 0 x m22 m23 0 y m31 m32 m33 0 z 0 0 0 1 1 v = (vx, vy, vz) y x m11 m12 m13 m21 m22 m23 m31 m32 m22 = vx2 + cosq (1- vx2) = vxvy(1-cosq ) - vz sen q = vzvx(1-cosq ) + vy sen q = vxvy(1-cosq ) + vz sen q = vy2 + cosq (1- vy2) = vyvz(1-cosq ) - vx sen q = vxvz (1-cosq ) - vy sen q = vyvz(1-cosq )+ vx sen q = vz2 + cosq (1- vz2)