580 likes | 757 Views
Transformações Geométricas. Rodrigo de Toledo UFRJ, CG1, 2010.2. Í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.
E N D
TransformaçõesGeométricas Rodrigo de ToledoUFRJ, CG1, 2010.2
Í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
-2 -1 3 3 1 2 Translação Translation of a point is simply vector addition y P1 P2 = P1 + P2 -2 -1 = + x
Escala Scaling about the origin is scalar multiplication y 2 2 1 1 = 2 * P2 P1 P2 = P1 * 2 x
Rebatimento por um eixo(espelhamento) x = x y = -y
Troca de Eixos x = y y = x
y x´ P´ = y´ x P = q y x Rotação pela Origem 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.
x’ a b x é ù é ù é ù ê ú ê ú ê ú = ê ú ê ú ê ú y’ c d y ë û ë û ë û a x b y x’ = + c x d y y’ = + Multiplicação de Matrizes onde:
s 0 x é ù é ù ê ú ê ú S , P M S P = = = ê ú ê ú 0 s y ë û ë û s 0 x s x é ù é ù é ù ê ú ê ú ê ú = ê ú ê ú ê ú 0 s y s y ë û ë û ë û 1 0 x é ù é ù ê ú ê ú I , M s = = ê ú ê ú ê ú ê ú 0 1 y ë û ë û Uniform Scaling , M s I P , =
s 0 x é ù é ù 1 ê ú ê ú P = S = ê ú ê ú ê ú ê ú y ë û 0 s ë û 2 Non-uniform Scaling é s 0 ù é s x ù é x ù ê ú ê ú 1 1 ê ú ê ú = ê ú ê ú ê ú ê ú 0 s ë y û s y ë û ë û 2 2 Note orientation shift in line
x y x y Non-uniform Scaling y Redução (0< sx <1) , Aumento (sy >1) P = x x´ P´ = y´ x´ sx 0 = sy y´ 0
x 1 0 x é ù é ù é ù ê ú ê ú ê ú = ê ú ê ú ê ú ê ú ê ú ê ú y 0 -1 y ë - û ë û ë û Flip an Axis... What does this do to appearance of objects?
y 0 1 x é ù é ù é ù ê ú ê ú ê ú = ê ú ê ú ê ú ê ú ê ú ê ú x 1 0 y ë û ë û ë û Swap Axes
cos ( ) sin ( ) x é q - q ù é ù ê ú ê ú M R P , R , P = = = ê ú ê ú ê ú ê ú sin ( ) cos ( ) y ë q q û ë û cos ( ) x sin ( ) y cos ( ) sin ( ) x é q - q ù é q - q ù é ù ê ú ê ú ê ú = ê ú ê ú ê ú ê ú ê ú ê ú sin ( ) x cos ( ) y sin ( ) cos ( ) y ë q + q û ë q q û ë û Rotate by
tx tx x ty ty y tx ty x x y y Transformações Geométricas(Translação) y x’ P’ P’ = = + y’ t P = x x´ ? Não pode ser escrito na forma ? = ? y´ ? x´ 1 Ruim para implementação 0 = + 1 y´ 0
x’ 1 0 tx x x’ y’ 0 1 ty y y’ 1 0 0 1 1 Vantagens das coordenadas homogêneas(Translação) w y t x yh w=1 xh P’ = = = [T] Matriz de Translação
wx x xh x D D wy y yh = = y w 1 w w y x 6 3 9 3 yh w=1 D D 4 2 6 = = 2 2 1 3 xh Coordenadas homogêneas y P = = P x x = xh /w w>0 y = yh /w Ex.: =
2 3 2 2 2 2 2 3 3 3 3 3 2 2 1 1/2 1/4 ? 0 = 3 ? 0 1 2 4 8 12 1.5 3 6 Vantagens das coordenadas homogêneas (pontos no infinito) w H1 w u = y H2 = C2 C3 C1 w=1 x H3 u w=1 yh uh H1 H2 H3 H4 uh xh . . . C1 C2 C3 C4 infinito na direção (2,3)
3 0 -2 0 1 0 D y y A’ 1 0 0 A D’ 1 1 1 O 2 1 2 x O’ x infinito -1 -1 B’ B C’ C 3 0 -2 2 4 2 3 0 -2 1 1 0 1 0 2 2 1 0 1 0 1 1 1 0 0 1 2 1 1 0 0 1 1 3 0 -2 3 0 -2 0 1 0 0 1 0 1 0 0 1 0 0 Vantagens das coordenadas homogêneas (pontos no infinito, exemplo) J J = = = 1 1 2 4 2 J J -1 -1 -2 -2 -1 = = = 1 1 1 2 1
Efeito de profundidade x x y y
Simplificação da projeção cônica Projeção cônica Projeção ortográfica plano de projeção eye direção de projeção plano de projeção
y a y0 x x0 a Concatenação y y0 x x0 y y x x
y y x x y y x x y y x x Concatenação de Transformações T1 T2 R1 R2 E P’= T2 R2E R1 T1 P
X X2 X3 X1 X2 X P P = = Y1 Y2 Y Y3 Y2 Y Y Y Y X X X P2 = Y Y Y y P3 = y x x X X X Composição com sistema local/móvel P2 = T P1 = R P1= T P e P2 = R P1 P2 = R T P T’ R T’ = R T R-1 P2 = R T P ou P3= R P e P2 = T’ P3 P2 = R T R-1 R P
m11 m12 m13m14 m21 m22 m23m24 m31 m32 m33 m34 m41 m42 m43m44 x y z 1 y xh yh zh w x = z x’ y’ z’ xh /w yh/w zh/w x y z = = = P’ P Geometria Projetiva e Coordenadas Homogêneas em 3D P’ P
x’ y’ z’ 1 x’ y’ z’ 1 Transformações em 3D(translações e escalas) y 1 0 0 tx x 0 1 0 ty y = x 0 0 1 tz z 0 z 0 0 1 1 sx 0 0 0 x 0 sy 0 0 y = 0 0 sz 0 z 0 0 0 1 1
x’ y y’ z’ 1 x x’ y’ z’ 1 x’ y’ z’ 1 Transformações em 3D(Rotações) 1 0 0 0 x 0 cos qx 0 y -sen qx = 0 sen qx cos qx 0 z qy 0 0 0 1 1 qx 0 x 0 sen qy cos qy qz z 0 1 0 y 0 = -sen qy 0 cos qy 0 z 0 0 0 1 1 0 0 cos qz x -sen qx sen qx 0 y cos qx 0 = 0 0 1 0 z 0 0 0 1 1
x’ y’ y z’ z 1 1 Transformações em 3D(rotação em torno de um eixo qualquer) m11 m12 m13 0 x m21 m22 m23 0 = m31 m32 m33 0 z 0 0 0 1 v = (vx, vy, vz) m11 = vx2 + cosq (1- vx2) m12 = vxvy(1-cosq ) - vz sen q m13 = vzvx(1-cosq ) + vy sen q m21 = vxvy(1-cosq ) + vz sen q m22 = vy2 + cosq (1- vy2) m23 = vyvz(1-cosq ) - vx sen q m31 = vxvz (1-cosq ) - vy sen q m32 = vyvz(1-cosq )+ vx sen q m22 = vz2 + cosq (1- vz2) y x
Projeções Planas Cônicas A Ap B Bp • realista • não preserva escala • não preserva ângulos
Projeções Planas Paralelas A Ap B Bp • pouco realista • preserva paralelismo • possui escala conhecida
Classificação das projeções planas • Paralelas • ortográficas dp // n • plantas • elevações • iso-métrica • oblíquas dp não é paralela a n • cavaleiras • cabinet • Cônicas • 1 pto de fuga • 2 ptos de fuga • 3 ptos de fuga
1 1/2 a a Projeções de um cubo • Paralelas 1 1 1 1 planta ou elevação iso-métrica Cabinete (a=45 ou 90) Cavaleira (a=45 ou 90) • Cônicas 1 pto de fuga 2 ptos de fuga
Projeção plana é uma transformação linear? Ou seja: T(P+Q) = T(P)+T(Q) e T(aP) = aT(P) ? 2V 2V V plano de projeção (2V)p¹ 2(Vp) 2Vp V Vp O Vp O cp cp Projeções cônicas não são TL, paralelas podem ser.
P+Q P Pp+ Qp Q Pp Pp Qp O Qp Projeção plana paralela é uma transformação linear? T(P+Q) = T(P)+T(Q) ? retas paralelas projetam em paralelas T( 0 ) = 0 ? Projeção paralela em plano que passa pela origem é uma transformação linear
Matrizes de projeções Cavaleiras e Cabinetes y y M 1 k (1,1,1) a 1 x x z Â3 Â2 1 0 -k.cos(a) M = 0 1 -k.sin(a) T(1,0,0) = (1,0) T(0,1,0) = (0,1) T(0,0,1) = ( -k cos a, -k sin a )
Matrizes de projeções pseudo-isométricas y y M j jp 1 (1,1,1) x i x ip kp k z Â3 Â2 T(1,0,0) = (cos 30 ,-sin 30) T(0,1,0) = (0,1) T(0,0,1) = (-cos 30, -sin 30) cos30 0 -cos30 M = -sin30 1 -sin30
ye P Pp ze xe yp xp d d = = ye -ze xe -ze d yp ye = -ze Projeção cônica simples zp = -d xe ye yp xp d -ze xp xe = -ze d d = n y xe e z z e e
d xp xe = -ze ye P d yp ye = Pp -ze ze xe xp d 0 0 0 d xe (d/-ze) xe yp 0 d 0 0 ye d ye (d/-ze) ye zp 0 0 d 0 ze d ze -d 0 0 -1 0 1 1 -ze 1 Projeção cônica simples zp = -d xe = = = ¸ w w
Simplificação da projeção cônica Projeção cônica Projeção ortográfica plano de projeção eye direção de projeção plano de projeção
ze = -f ye ze xe ze = -n n 0 0 0 0 n 0 0 0 0 0 0 -1 0 ye ze xe Distorce o frustum de visão para o espaço da tela [ P ] = d = n ze = -n ze = -f
n 0 0 0 0 n 0 0 0 0 n+f n Ÿ f 0 0 -1 0 Uma equação para profundidade Ptos no near (z=-n): Ptos no far (z=-f): [ P ] =
ye ze xe 0 1 0 -(r+l)/2 0 0 1 -(t+b)/2 [ T ] = 0 0 +(f+n)/2 1 0 0 1 0 ye ze xe Translada o paralelepípedo de visão para origem t b l r (t-b)/2 -(t-b)/2 -(r-l)/2 (f-n)/2 -(f-n)/2 (r-l)/2
ye ze xe 0 0 0 2/(r-l) 0 0 2/(t-b) 0 0 -2/(f-n) 0 0 1 0 0 0 yd near 1 1 1 -1 -1 -1 zd xd far Escala o paralelepípedo de visão no cubo [-1,1]x[-1,1]x[-1,1] (t-b)/2 -(t-b)/2 -(r-l)/2 (f-n)/2 -(f-n)/2 (r-l)/2 far near [S] =
n 0 0 0 0 n 0 0 0 0 n+f n Ÿ f 0 0 -1 0 0 1 0 -(r+l)/2 0 0 1 -(t+b)/2 [ T ] = 0 0 +(f+n)/2 1 0 0 1 0 0 0 0 2/(r-l) 0 0 2/(t-b) 0 [S] = 0 -2/(f-n) 0 0 1 0 0 0 Matriz Frustum do OpenGL [ P ] = [S TP ] = OpenGL Spec
Projeção Cônica (Frustum) void glFrustum( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_, GLdouble far_ ); view frustum ye ze xe camera (eye) Obs.: near e far são distâncias(> 0) Plano de projeção bottom right left top far near ye xe ze ze
Projeção Cônica (Perspective) void glPerspective( GLdouble fovy, GLdouble aspect, GLdouble near_, GLdouble far_ ); w ye aspect = w/h ze h xe near far fovy xe ze
0 1 0 -(r+l)/2 0 0 1 -(t+b)/2 [ T ] = 0 0 +(f+n)/2 1 0 0 1 0 0 0 0 2/(r-l) 0 0 2/(t-b) 0 [S] = 0 -2/(f-n) 0 0 1 0 0 0 Matriz Ortho do OpenGL OpenGL Spec