Visualização do OpenGL. Simplificação da projeção cônica plano de projeção eye Projeção cônica plano de projeção direção de projeção Projeção ortográfica

  • View
    120

  • Download
    2

Embed Size (px)

Text of Visualização do OpenGL. Simplificação da projeção cônica plano de projeção eye Projeção...

  • Slide 1
  • Visualizao do OpenGL
  • Slide 2
  • Simplificao da projeo cnica plano de projeo eye Projeo cnica plano de projeo direo de projeo Projeo ortogrfica
  • Slide 3
  • Problema do clipping xexe yeye zeze P1P1 P2P2 1 1 -n 1 n n -n 2 n 1 1 -n 1 n 0 0 0 0 n 0 0 0 0 n+f 0 0 n f 0 == n 0 0 0 0 n 0 0 0 0 n+f 0 0 n f 0 1 1 n 1 = n n n 2 +2nf -n -n-2f 1 = xexe yeye zeze P 1 P 2 w
  • Slide 4
  • Clipping em coordenadas homogneas -1 x h /w 1 -1 y h /w 1 -1 z h /w 1 -1 x 1 -1 y 1 -1 z 1 x [left, right] y [bottom, top] z [near, far] xdxd ydyd zdzd 111111 near far right left bottom top
  • Slide 5
  • Clipping em coordenadas homogneas x [left, right] y -1 x h /w 1 1 x x h /w 1 x h w, se w>0 x h w, se w
  • Clipping em coordenadas homogneas x [left, right] y -1 x h /w 1 1 x x w x h w x h -w x h w x h -w no serve! w < 0 (z e >0) 1 0 0 0 0 -x h -w = 0 x h -w = 0
  • Slide 7
  • O Equao de um plano N=(A,B,C) P=(x,y,z) x y z P0P0 N.P = N.(P 0 + P) = N.P 0 = d P d = Ax + By + Cz d N.P = Ax + By + Cz Ax + By + Cz +D = 0 (A, B, C) = N e D = -d = N.(-P 0 ) (A, B, C) = N e D = -d = N.(-P 0 ) (N. P = 0)
  • Slide 8
  • O Distncia de um ponto a um plano N=(A,B,C) P=(x,y,z) PpPp x y z P N.P = Ax + By + Cz N. P = Ax + By + Cz+D N.P =N.(P p + P ) N.P = d + N. P
  • Slide 9
  • Interseo de reta com plano P1P1 P2P2 x y z d 1 = | Ax 1 + By 1 + Cz 1 +D | d1d1 d2d2 d 2 = | Ax 2 + By 2 + Cz 2 +D | P P = d 1 P 2 + d 2 P 1 d 1 + d 2
  • Slide 10
  • Clculo das distncias /* ===================== Distance ====================== ** ** This function computes and returns the distance between a ** point and a plane. Normal points toward out. */ double Distance(double x, double y, double z, double w, int plane ) { switch( plane ) { case 0: return( -w - x ); case 1: return( -w + x ); case 2: return( -w - y ); case 3: return( -w + y ); case 4: return( -w - z ); case 5: return( -w + z ); } return( 0.0 ); }
  • Slide 11
  • Transformao para o Viewport xdxd ydyd zdzd 111111 xwxw ywyw w h x w = x 0 + w*(x d -(-1)) / 2 y w = y 0 +h*(y d -(-1)) / 2 z w = z d / 2 + 1/2 x w = x 0 + w*(x d -(-1)) / 2 y w = y 0 +h*(y d -(-1)) / 2 z w = z d / 2 + 1/2 0 void glViewport(GLint x0, GLint y0, GLsizei width, GLsizei height ); z w [0..1]
  • Slide 12
  • Transformaes de um vrtice OpenGL Spec
  • Slide 13
  • Modelo do Pintor profundidade z
  • Slide 14
  • Problemas na ordenao de faces + + zaza zbzb (a) (b)
  • Slide 15
  • BSP trees: Binary Space Partion Trees 1 2 3 4 5a 5b 3 1 2 5a 4 5b atrsfrente 1 2 3 4 5a 5b 3 4 5b atrsfrente 2 atrs 5a 1 1 2 3 4 5b 3 2 5a 1 4 5b
  • Slide 16
  • Exibio de uma BSP void bspDisplay(bspTree *tree) { if (arvore no vazia) { if (observador est a frente da raiz) { bspDisplay(tree backChild); DisplayPolygon(tree root); bspDisplay(tree frontChild); } else { bspDisplay(tree frontChild); DisplayPolygon(tree root); bspDisplay(tree backChild); } Mostra a rvore de trs, a raiz e a rvore da frente. Mostra a rvore da frente, a raiz e a rvore de atrs.
  • Slide 17
  • BSP trees: Dois exemplos de exibio 1 2 3 4 5a 5b 3 2 5a 1 4 5b 5a, 2, 1, 3, 5b, 4 1 2 3 4 5a 5b 3 2 5a 1 4 5b 4, 5b, 3, 5a, 2, 1
  • Slide 18
  • ZBuffer: idia bsica z MATRIZ DE PROFUNDIDADES
  • Slide 19
  • Rasterizao de Polgonos e Linhas
  • Slide 20
  • ZBuffer - pseudo-cdigo void ZBuffer( void) { int x,y; for (x=0; x