1 / 24

2D képszintézis

2D képszintézis. Szirmay-Kalos László. Számítógépes grafika. modellezés. Virtuális világ modell. képszintézis. v il ág = s ík. Metafórák: 2D rajzolás. 2D megjelen ítési csővezeték. Világ. Referencia helyzet (modell ezési k oord). Modell Transzf,. vektorizáció. ablak.

kelii
Download Presentation

2D képszintézis

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2D képszintézis Szirmay-Kalos László

  2. Számítógépes grafika modellezés Virtuális világ modell képszintézis világ = sík • Metafórák: • 2D rajzolás

  3. 2D megjelenítési csővezeték Világ Referencia helyzet (modellezési koord) Modell Transzf, vektorizáció ablak Képernyőre vetítés Képernyő v. appwindow Vágás + nézet transzf. nézet nézet (1,1) raszterizáció (-1,-1) Képernyő Normalizált eszköz

  4. Vektorizáció r(t), t in [0,1] r2 rn r1 [0,1]: t1= 0,t2 = 1/n,... ,tn=1 r1 =r(0), r2 = r(t2),… ,rn= r(1)

  5. Poligon háromszögekre bontása Nem-diagonál Konvex Konkáv diagonál

  6. Fül pi-1 • pi fül, ha pi-1 – pi+1 diagonál • Fül levágható! • Fülvágás: • keress fület és nyissz! diagonál pi pi+1

  7. Algoritmus? • Minden 4+ csúcsú sokszögnek van diagonálja, azaz mindegyik felbontható diagonálok mentén: • Két fül tétel: Minden legalább 4 csúcsú sokszögnek van legalább 2 füle.

  8. Fülvágó algoritmus 1 3 2 4 3 0

  9. Modellezési transzformáció Sx 0 0 0 Sy 0 00 1 cosf sinf 0 -sinfcosf 0 00 1 1 0 0 010 px py 1 TM ux uy 0 vx vy 0 ox oy 1 (x, y) v u [x, y, 1] = [a,b, 1]  (a,b) o [0, 0, 1] [ox oy 1 ] [1, 0, 1] [ox+ux oy+uy 1 ] [0, 1, 1] [ox+vx oy+vy 1 ] (x, y) = o + au + bv

  10. Képernyő projekció világ Normalizált eszköz Képernyő ww vw (1,1) (x, y) (X, Y) (xc, yc) wh vh (vx,vy) nézet (wx,wy) ablak (-1,-1) X = vw (xc+1)/2+vxY = vh (yc+1)/2+vy xc = 2(x-wx)/ww-1 yc = 2(y-wy)/wh-1 2/ww0 0 0 2/wh 0 -1-2wx/ww-1-2wy/wh 1 [xc, yc, 1] = [x, y, 1]

  11. Vágás Pont vágás: • x > xmin= -1 x < xmax= +1 y > ymin= -1 y < ymax= +1 ymax (x, y) xmax Belül xmin ymin Kívül

  12. Vágás • x > xmin xmin (x, y) Belül Kívül

  13. Vágás • y > ymin Belül (x, y) ymin Kívül

  14. Vágás • x < xmax xmax (x, y) Belül Kívül

  15. Vágás • y < ymax Kívül Belül (x, y)

  16. Szakasz vágás xmax x(t) = x1 + (x2 - x1)t, y(t) = y1 + (y2 - y1)t x = xmax • Metszés: • xmax= x1 + (x2 - x1)t t = (xmax-x1)/(x2-x1) xi = xmaxyi= y1 + (y2 - y1) (xmax-x1)/(x2-x1) xi,yi x2,y2 x1,y1

  17. Sutherland-Hodgeman poligonvágás PolygonClip(p[n]  q[m]) m = 0; for( i=0; i < n; i++) { if (p[i] belső) { q[m++] = p[i]; if (p[i+1] külső) q[m++] = Intersect(p[i],p[i+1], vágóegyenes); } else { if (p[i+1] belső) q[m++] = Intersect(p[i],p[i+1], vágóegyenes); } } } Első pontot még egyszer a tömb végére

  18. Raszterizáció model Geometriai primitívek: 0.1-1 microsec / primitív transzformáció vágás raszterizáció Pixel műveletek Pixelek néhány nanosec / pixel rasztertár

  19. Szakasz rajzolás Egyenes egyenlete: y = mx + b Egyeneshúzás for( x = x1; x <= x2; x++) { Y = m*x + b; y = Round( Y ); write( x, y ); } x1 x2

  20. Inkrementális elv • Szakasz rajzolás: Y(X) = mX + b • Y(X) = F( Y(X-1) ) = Y(X-1) + m • Összeadás: fixpontos ábrázolás: y = Y 2T • T: hiba < 1 a leghosszabb műveletsornál • N 2-T< 1: T > log2N • round( y ): y+0.5-t csonkítjuk

  21. DDA szakaszrajzolás DDADrawLine(x1, y1, x2, y2) { m = (y2 - y1)/(x2 - x1); y = y1;+ 0.5 FOR X = x1 TO x2 { Y = round(y);trunc(y) WRITE(X, Y, color); y = y+m; } }

  22. DDA szakaszrajzoló hardver X Y X számláló y regiszter 0.5 = .10000002 CLK S x1 y1 m

  23. Háromszög kitöltés (X3,Y3) Dx/Dy Dx/Dy (X2,Y2) y x(y) x(y+1) x(y+2) (X1,Y1)

  24. Terület elárasztás Belső pont = kék Flood(x, y) { if (pixel[x][y] inner point) { Write(x, y, color); Flood(x, y-1); Flood(x, y+1); Flood(x-1, y); Flood(x+1, y); } } 2 2 2 1 seed 1 1 2 0 1 0 Flood 1 Flood(x+1,y); Flood(x-1,y); Write Flood(x,y+1); Flood(x,y-1); 2 Flood(x,y+1); Flood(x-1,y); Flood(x,y-1); Flood(x+1,y); Write

More Related