Computação Gráfica Módulo III Geometria UniverCidade - Prof. Ismael H F Santos April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br Considerações Gerais Objetivo: Discutir os principais conceitos eos princípios básicos dos Sistemas Gráficos e a Programação em OpenGL. A quem se destina :Alunos e Profissionais que desejem aprofundar seus conhecimentos sobre Computação Grafica e suas aplicações. April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br
Bibliografia Computação Gráfica Volume. Jonas Gomes e Luiz Velho. Instituto de Matemática Pura e Aplicada IMPA. Introdução a Computação Gráfica - Paulo Roma http://www.lcg.ufrj.br/compgraf/downloads/apostila.pdf http://www.lcg.ufrj.br/compgraf/downloads/apostila.ps.gz Notas do Curso ministrado na Universidade de Marland pelo Prof. David Mount ftp://ftp.cs.umd.edu/pub/facult/mount/47/47lects.ps.gz http://www.lcg.ufrj.br/~esperanc/cg/47lects.ps.gz Apostila Fundamentos da Imagem Digital Antonio Scuri Computer Graphics: Principles and Practice, Second Edition. James Fole, Andries van Dam, Steven Feiner, John Hughes. Addison- Wesle. OpenGL Programming Guide, nd Edition. Mason Woo, Jackie Neider, Tom Davis. Addison Wesle. April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 3 Bibliografia OpenGL OpenGL Programming Guide, nd Edition. Mason Woo, Jackie Neider, Tom Davis. Addison Wesle. http://www.lcg.ufrj.br/redbook Manual de referência online http://www.lcg.ufrj.br/opengl Sítio oficial do OpenGL www.opengl.org April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 4
Ementa Introdução ao OpenGL Geometria Eemplos de Transformações D Fórmulas e cálculos das transformações D Usando matriz de transformação (por que?) Coordenadas Homogêneas Concatenação de transformações Transformações 3D Projeções Histórico April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 5 CG CO3 Paradigma dos 4 universos April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 6 3
Transformações Geométricas April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 7 CG CO3 Transformações Geométricas April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 8 4
Eemplos de Transformações D Translação Escala uniforme não uniforme Rebatimento por um eio (espelhamento) Troca de eios Rotação pela origem April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 9 Translação Translation of a point is simpl vector addition P P P + - P - 3 + - 3 - April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 5
Escala Scaling about the origin is scalar multiplication P P * P P * April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br Rebatimento por um eio (espelhamento) - April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 6
Troca de Eios April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 3 Rotação pela Origem P θ P.cos θ -.sen θ.sen θ +.cos θ April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 4 7
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. April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 5 Multiplicação de Matrizes a c b d onde: a + b c + d April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 6 8
9 April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 7 Uniform Scaling,, S s s P M S P s s s s,, I M I s P M s April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 8 Non-uniform Scaling Note orientation shift in line M S P s s s s S s s P
Non-uniform Scaling P P Redução (< s <), Aumento (s >) s s April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 9 Flip an Ais... - What does this do to appearance of objects? April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br
Swap Aes April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br Rotate b θ M R P, R cos( θ) sin( θ), sin( θ ) cos( θ) P cos( θ) sin( θ) sin( θ) + cos( θ) cos( θ) sin( θ) sin( θ ) cos( θ) θ April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br
Transformações Geométricas (Translação) P t P t P + t t t?? Não pode ser?? escrito na forma t + t Ruim para implementação April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 3 Vantagens das coordenadas homogêneas (Translação) w t h w h P t t [T] Matrizde Translação April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 4
Coordenadas homogêneas P P w D D w w h h w w h /w h /w w> h w h E.: April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 5 3 D 3 D 6 4 9 6 3 Vantagens das coordenadas homogêneas (pontos no infinito) w H w u 3 w C H C C 3 u H 3 h w 3 u h h u h H H H 3 H 4?? 3 3 3 3... 3 / /4 C C C 3 C 4 infinito 4 8 infinito na na.5 3 6 direção April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br direção 6 (,3) (,3) 3
Vantagens das coordenadas homogêneas (pontos no infinito, eemplo) 3 - A D A D - O B O infinito - B C C 3-3 - 4 3 - - - 3-4 - - - April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 7 Efeito de profundidade April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 8 4
Simplificação da projeção cônica Projeção cônica Projeção ortográfica ee plano de projeção direção de projeção April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br plano de projeção 9 Concatenação α cosα sin α sin α cos α α ' cos α sin α ' sin α cos α April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 3 5
Concatenação de Transformações T T R R E P P T R E R T P April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 3 Composição com sistema local/móvel Y P X Y T Y P X Y R Y P X Y X X X P T P e P R P P R T P Y P X Y R Y P 3 X 3 Y 3 T Y X P Y X X T R T R - X P 3 R P e P T P 3 P R T R - R P ou P R T P April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 3 6
Geometria Projetiva e Coordenadas Homogêneas em 3D P z P h h z h w m m m 3 m 4 m m m 3 m 4 m 3 m 3 m 33 m 34 m 4 m 4 m 43 m 44 z P z h /w h /w z h /w P z April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 33 Transformações em 3D (translações e escalas) t z z t t z z s z s s z z April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 34 7
Transformações em 3D (Rotações) θ z cos θ sen θ -sen θ cos θ z z θ z θ z cos θ sen θ -sen θ cos θ z z cos θ z sen θ -sen θ cos θ z April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 35 Transformações em 3D (rotação em torno de um eio qualquer) m m m 3 z z m m 3 m m 3 m 3 m 33 z v (v, v, v z ) m v + cosθ (- v ) m v v (-cosθ ) - v z sen θ m 3 v z v (-cosθ ) + v sen θ m v v (-cosθ ) + v z sen θ m v + cosθ (- v ) m 3 v v z (-cosθ ) - v sen θ m 3 v v z (-cosθ ) - v sen θ m 3 v v z (-cosθ )+ v sen θ m v z + cosθ (- v z ) April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 36 8
CG CO3 Projeções April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 37 Projeções Planas Cônicas A A p B B p realista não preserva escala não preserva ângulos April 5 9
Projeções Planas Paralelas A A p B B p pouco realista preserva paralelismo possui escala conhecida April 5 Classificação das projeções planas Paralelas ortográficas plantas elevações iso-métrica oblíquas cavaleiras cabinet Cônicas pto de fuga ptos de fuga 3 ptos de fuga dp // n dp não é paralela a n April 5
Projeções de um cubo Paralelas / a a planta ou elevação iso-métrica Cabinete (a45 ou 9) Cavaleira (a45 ou 9) Cônicas April 5 pto de fuga ptos de fuga Projeção plana é uma transformação linear? Ou seja: T(P+Q) T(P)+T(Q) e T(aP) at(p)? V O V V p (V) p (V p ) V V V p plano de projeção O V p April 5 cp Projeções Projeções cônicas cônicas não não são são TL, TL, paralelas paralelas podem podem ser. ser. cp
Projeção plana paralela é uma transformação linear? T(P+Q) T(P)+T(Q)? P+Q P retas paralelas projetam em paralelas P p Q P p P p + Q p O Q p Q p T( T( ) )?? April 5 Projeção Projeção paralela paralela em em plano plano que que passa passa pela pela origem origem é é uma uma transformação transformação linear linear Matrizes de projeções Cavaleiras e Cabinetes M (,,) k a z 3 T(,,) (,) T(,,) (,) T(,,) ( -k cosa, -k sin a ) M -k.cos(a) -k.sin(a) April 5
Matrizes de projeções pseudoisométricas j (,,) M j p z k i 3 k p i p T(,,) (cos 3,-sin 3) T(,,) (,) T(,,) (-cos 3, -sin 3) M cos3 -cos3 -sin3 -sin3 April 5 Projeção cônica simples e P e P e e P p p P p p d z p -d p e d - e e p e d - p d -ze e d p - p d n p d -ze e April 5 Prof. z Ismael e H. F. Santos - ismael@tecgraf.puc-rio.br e 46 e 3
Projeção cônica simples e P p P p p d -ze d -ze e e e z p -d p p z p d d e d e d e d d - - e (d/- ) e (d/- ) e -d w w April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 47 Simplificação da projeção cônica Projeção cônica Projeção ortográfica ee plano de projeção direção de projeção plano de projeção April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 48 4
Distorce o frustum de visão para o espaço da tela e -f e -n n d d n n [ P ] n α - β e e -n -f April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 49 Uma equação para profundidade α β z Ptos no near (z-n): Ptos no far (z-f): n f α + α + β n β f α β f f + n n [ P ] n n n+f - n f April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 5 5
Translada o paralelepípedo de visão para origem e t b e l r [ T ] -(r+l)/ -(t+b)/ +(f+n)/ (t-b)/ e -(t-b)/ -(r-l)/ e (r-l)/ (f-n)/ -(f-n)/ April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 5 Escala o paralelepípedo de visão no cubo [-,][-,][-,] (t-b)/ e -(t-b)/ -(r-l)/ (r-l)/ (f-n)/ near e -(f-n)/ far [S] /(r-l) /(t-b) -/(f-n) far April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 5 z d d d - - - near 6
Matriz Frustum do OpenGL [ P ] [ T ] n n n+f - n f -(r+l)/ -(t+b)/ +(f+n)/ [S T P ] OpenGL Spec n r + l r l r l n t + b t b t b ( f + n ) fn f n f n [S] /(r-l) /(t-b) -/(f-n) April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 53 Projeção Cônica (Frustum) void glfrustum( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_, GLdouble far_ ); e view frustum e Obs.: near e far são distâncias( > ) camera (ee) Plano de projeção left right top bottom far near April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br e e ze 54 7
Projeção Cônica (Perspective) void glperspective( GLdouble fov, GLdouble aspect, GLdouble near_, GLdouble far_ ); e w aspect w/h e h near far fov e ze April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 55 Matriz Ortho do OpenGL [ T ] -(r+l)/ -(t+b)/ +(f+n)/ OpenGL Spec [S] /(r-l) /(t-b) -/(f-n) April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 56 8
Projeção Paralela (Ortho) e e top bottom A left near right A far B ( right top far ) ( left bottom near ) void glortho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_, GLdouble far_ ); void gluorthod( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top ); April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 57 Glu Look At void glulookat(gldouble ee, GLdouble ee, GLdouble eez, GLdouble center, GLdouble center, GLdouble centerz, GLdouble up, GLdouble up, GLdouble upz); Dados: ee, ref, up (definem o sistema de coordenadas do olho) Determine a matriz que leva do sistema de Coordenadas dos Objetos para o sistema de Coordenadas do Olho up ee center Coordenadas dos Objetos Coordenadas do Olho April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 58 9
Calcula o sistema - e e vup ee dados: dados: ee, ee, center, center, up up view center view view center center --ee ee z vup ee view center z April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 59 z e view view // view view Calcula o sistema - e e vup e view ee e e (vup (vup z ) e )// vup vup z e z center e vup e ee view vup e center e ee z e e z e e e view April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 6 3
Translada o ee para origem e e center ee [ T ] -ee -ee -ee z e z e ee z center April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 6 Roda e e para o o z o [ R ] e e ez e e ez z e e, o e ee, z o z e, o center April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 6 3
Matriz Look At do OpenGL [ T ] -ee -ee -ee z z e view view // view view e e (vup (vup z ) e )// vup vup z e [ R T ]? [ R ] e e z e e e e e ez e e ez z April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 63 Concatenação das transformações [ T ] e center e ee z [ R ] e e [ P ] e e e ee e [ S ] [ T ] center [ T ] [ P ] e e [ S ] z e near - - - e April 5 far Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 64 [ R ] [ T ] 3
CG CO3 Visualização OpenGL April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 65 Simplificação da projeção cônica Projeção cônica Projeção ortográfica ee plano de projeção direção de projeção April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br plano de projeção 66 33
Problema do clipping e P P e n n n+f - n f -n n n -n n -n n n n+f - n f n n n n +nf -n - - -n-f e w P P April 5 e Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 67 Clipping em coordenadas homogêneas z d d d - - - top bottom far near right left [left, right] [bottom, top] z [near, far] - - - z - h /w - h /w - z h /w April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 68 34
Clipping em coordenadas homogêneas [left, right] - - h /w h h w,, se se w> w> h /w OpenGL Spec h h w,, se se w< w< April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 69 Clipping em coordenadas homogêneas - [left, right] h -w - h /w - h -w h -w h w não serve! w < ( >) w h w April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 7 - - h -w - - h -w h -w 35
Equação de um plano N.P N.P A A + B B + Cz Cz N.P N.P N.(P N.(P + D P) P) N.P N.P d (N.DP ) d A A + B B + Cz Cz z O d P D P N(A,B,C) P(,,z) A A + B B + Cz Cz +D +D (A, (A, B, B, C) C) N e D -d -d N.(-P N.(-P ) ) April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 7 Distância de um ponto a um plano z P(,,z) D P N(A,B,C) N.P N.P A A + B B + Cz Cz N.P N.P N.(P p +D p +D P )) N.P N.P d + N.D N.D P P p N.D N.D P A A + B B + Cz+D O April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 7 36
Interseção de reta com plano P d A + B + Cz +D z d P d A + B + Cz +D d P P d P + d P d + d April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 73 Cálculo das distâncias /* Distance ** ** This function computes and returns the distance between a ** point and a plane. Normal points toward out. */ double Distance(double, double, double z, double w, int plane ) { switch( plane ) { case : return( -w - ); case : return( -w + ); case : return( -w - ); case 3: return( -w + ); case 4: return( -w - z ); case 5: return( -w + z ); } return(. ); } April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 74 37
Transformação para o Viewport void glviewport(glint, GLint, GLsizei width, GLsizei height ); w w + w*( w*( d -(-)) d -(-))/ / w w +h*( +h*( d -(-)) d -(-))/ / zz w w zz d / d / + / / z d d d - - - w h w w April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br z w [..] 75 Transformações de um vértice OpenGL Spec April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 76 38
Modelo do Pintor profundidade z April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 77 Problemas na ordenação de faces (b) (a) + + z a z b April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 78 39
BSP trees: Binar Space Partion Trees 5a 5b 3 4 frente 5a 3 atrás 4 5b 5a 5b 3 4 3 frente frente atrás 5a atrás 4 5b 5a 5b 3 4 5a 3 4 5b April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 79 Eibição de uma BSP void bspdispla(bsptree *tree) { if (arvore não é vazia ) { if (observador está a frente da raiz) { bspdispla(tree backchild); DisplaPolgon(tree root); bspdispla(tree frontchild); } else { bspdispla(tree frontchild); DisplaPolgon(tree root); bspdispla(tree backchild); } } } Mostra a árvore de trás, a rai a árvore da frente. Mostra a árvore da frente, a rai a árvore de atrás. April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 8 4
BSP trees: Dois eemplos de eibição 5a 5b 3 4 5a 3 4 5b 5a, 5a,,,,, 3, 3, 5b, 5b, 4 5a 5b 3 4 5a 3 4 5b 4, 4, 5b, 5b, 3, 3, 5a, 5a,,, April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 8 ZBuffer: idéia básica z MATRIZ DE PROFUNDIDADES April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 8 4
Rasterização de Polígonos e Linhas April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 83 ZBuffer - pseudo-código void ZBuffer( void) { int,; for (; <w; ++) { for (;<h; ++) { WritePiel(,, bck_color); WriteZ(,,); } } for (each primitive) { for (each piel in the projected primitive) { double pz z coordinate of the (,) piel; if (pz < ReadZ(,)) { WritePiel(,, color); WriteZ(,,pz); } } } void } /* Zbuffer */ void glenable( glenable( GL_DEPTH_TEST GL_DEPTH_TEST ); ); April 5 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 84 4