Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

4. A grafikus szerelőszalag - áttekintés 4.0. Bevezetés.

Hasonló előadás


Az előadások a következő témára: "4. A grafikus szerelőszalag - áttekintés 4.0. Bevezetés."— Előadás másolata:

1 4. A grafikus szerelőszalag - áttekintés 4.0. Bevezetés

2 2 Az elemző-építő program – modellt épít  APRO - alkalmazási program, GM - geometriai modell GRASZ - grafikus alapszoftver: - feladata: rajzolás - működése: műveletek sorozata: a „szerelőszalag”

3 3 A modell adatszerkezete Színtér l | __ tárgy 1 __... __ tárgy n __ { nil } // tárgyak l l... l l__ lap 1 __... __ lap m __ { nil } // lapok l l... l l__ P1 __ P2 __ P3 __ { nil } // pontok l l... l... (vertices) l l __ { x y z [ w ] }

4 4 Az elemző-építő program – néha rajzol  APRO - alkalmazási program, GM - geometriai modell GRASZ - grafikus alapszoftver: - feladata: rajzolás - működése: műveletek sorozata: a „szerelőszalag”

5 A grafikus alapszoftver - rajzol BGI (és mások): KKR-ben, 2D Windows GDI, DirectDraw KKR-ben, 2D OpenGL – SKR  VKR  KKR, 3D alapszoftver Grafikus munkaállomások: pl. a láthatóság hardver / förmver-ben. Néha a GM rendszerekbe beépítve.

6 6 Grafikus szerelőszalag: a kép előállításának műveletei; műveletek sorozata „grafikus szerelőszalag” (viewing pipeline, „csővezeték”)

7 7

8 A 2D szerelőszalag műveletei 0. Geometriai modell – építés, elemzés, módosítás ------------------------------------------------------------------------ 1. Képelemek előkészítése: elhelyezés 2. Leképezés: VKR  KKR (3D  2D) 3. Képkivágás: a kereten kívüliek elhagyása 4. Láthatóság-takarás: a takart elemek elhagyása 5. Raszter-konverzió „a képpontok színezése” - a képpont a KPPufferba (frame buffer)-be P’ = View · P View = ( Utó · Raszko · Láthat · Vág · Lekép · Előkész )

9 9 procedure GdrawLine( P,Q : Gpoint ); { Egyenes szakasz kirajzolása } begin prepare (p, Q); // előkészítés mapping(P, U); mapping(Q,V); // Leképezés clipFlag := clipLine( U,U1,V,V1); // Vágás if ( clipFlag ) then paintLine(U1,V1); // Raszter-konv. end;

10 4.1. Előkészítés Képelemek előkészítése: helyettesítése: geometriai elem  képelem elhelyezése: a közös Világ KR-be

11 11

12 12 A képelemek előkészítése Rajzoláskor: APRO bejárja a geometriai modellt, kiválasztja a kívánt elemeket, és átadja a GRASZ-nak. GRASZ egyenként átveszi és „ráteszi” a szerelőszalagra Az első művelet: A képelemek előkészítése

13 13 Előkészítés: (1) helyettesítés,... A modell geometriai elemeit helyettesítjük képelemekkel Görbült felület  sokszögek (háromszögek) Görbe vonal  szakaszos közelítés OpenGL képelemek: TRIANGLE_STRIP TRIANGLE_FAN QUAD_STRIP

14 Előkészítés: (2) elhelyezés: SKR  VKR P’ = M · P ; M = T  S  R

15 Az ablak

16 Egy fal

17 Egy ház

18 Házsor

19 Elhelyező transzformáció: hasonlóság SKR  VKR; M = T  S  R

20 20 Egy (másik) Elhelyező transzformáció H: Saját KR-jében K: az ő Saját KR-jében K’ = K +  i (N i ٠H) // lukas kereszt S = V +  j [ M j ٠ K’ ] = // a sáv = V +  j [ M j ٠ ( K + S i N i ٠H ) ] M j, N i : elhelyező transzformációk

21 21 Egy dőlt kereszt rajzolása T := M j ; draw T  K ; push T ; for i:= 1 to 4 do T := stacktop; T := T  N i ; draw T  H ; end // for i; pop T ;

22 4.2. Leképezés (a tárgytérből a képtérbe) Világ KR  Kép KR (+Z) 2D-Szesza: képkeret  képmező 3D-Szesza: Kamera KR  Kép KR-3D

23 23

24 Szesza-2. Leképezés a tárgytérből a képtérbe A tárgyak adottak a VKR-ben; „tárgytér” leképezés a „képtérbe”; 3D (2D) Koordináta-transzformáció M A pontok helyvektorának szorzása a leképezés mátrixával: P’ = M · P

25 2D-Szesza: Leképezés A tárgyak adottak a VKR-ben; „tárgytér” leképezés a „képtérbe”; 3D (2D) alakzatok (pontok) transzformációja P’ = M · P

26 2D Leképezés: VKR  KKR Nézetmező (keret), tárgytér: { K ba, K jf } Képmező, képtér: { M ba, M jf } Leképezés: u = a · x + b, v = c · y + d

27 2D Leképezés: VKR  KKR Matematikai modell: u = a · x + b, v = c · y + d; a = du / dx; c = dv / dy; ( < 0 ) dx = k j - k b, dy = k f - k l, du = m j - m b, dv = m f - m l ; b és d: K ba  M ba –ból „finomságok”: c < 0 a := min( |a|, |c| ), c := - a ; valós  egész; levágás-kerekítés kinn ? benn ? határon 27

28 28 2D Leképezés: minden új leképezésnél beállítás : GsetWorldFrame ( K ba, K jf : Gpoint2 ); GsetScreenViewPort( M ba, M jf : Gpixel ); minden képelemnél a leképezés : GmapWorldToScreen(P:Gpoint2; P1:Gpixel);

29 3D Leképezés: Párhuzamos, vagy középpontos vetítés (1) VKR-3D  KKR-3D: nézetmező: csonkagúla  „képmező”: téglatest (2) Láthatóság-takarások Z szerint, a téglatestben (3) Végül: kép: síkvetület a téglatest alapjára (4) a téglatest alapja  képmező (a képernyőn)

30 A kamera koordináta-rendszerében

31 31 Középpontos vetítés Számítási módszerek: 1.P’ = M  P ; 3D  3D 2.láthatóság-takarás z’ szerint 3.3D  2D: az XY síkra (z elhagyása) M : projektív transzformáció MM : a határozatlan együtthatók módszerével : meghatározza 5-5 „független” pont

32 32 Például: egy sínpár perspektívája X = [ 1, 0, 0, 0 ]; X’ = X Y = [ 0, 1, 0, 0 ]; Y’ = Y C = [ 0, 1, 0, 1 ]; C’ = [ 0, 0, 1, 0 ] T = [ 0, 0, t*, 1 ] ; T’ = [ 0, 0, 1, 1 ] E = [ k*,k*,k, 1 ]; E’ = [ -1, 1, 0, 1]

33 33 Az előírásoknak megfelelő mátrix: M = ( s/k* 0 0 0 ); s = -1/k+t* | 0 s/k* 0 0 |; k * = k·tg  | 0 0 -1/k 1 | ( 0 0 s 0 ) Az X = [x, y, z, h] pontot ezzel transzformálva: X' = M · X = [s · x / k*, s · y / k*, - z / k + h, s · z] és ha z nem nulla, akkor X' = ( x / (z·k*), y / (z·k*), -1 / (s·k) + h / (s·z) )

34 Vetítés az OpenGL-ben 1.Modell-transzformációk és  PKR (SzKR)-re 2.Vetítés (projektív vagy affin) transzformáció 3.Vágás (a projektív transzformált szűrése) 4.A keret leképezése a képmezőre

35 35 Leképezés a tárgytérből a képtérbe 2D grafika: VKR (-2D)  KKR (-2D) VKR keret  képmező 3D grafika: elhelyezés: SKR(-3D)  VKR(-3D) leképezés: (1) VKR(-3D)  NKKR(-3D ) (2) NKKR-ben: láthatóság-takarás (3) vetítés az alapsíkra (z=0) (4)  képmező

36 36 4.3. Vágás A képkereten kívüli részek elhagyás (vagy csak megjelölése)

37 37

38 Képkivágás: kereten kívül eső részek elhagyása Vágó-tartomány „mire”, mivel vágunk?: téglalap (téglatest), vagy fél sík (fél tér) A vágott elemek (mit vágunk?): szakasz, sokszög, szöveg, kör mindegyikre más-más Legtöbbször a képtérben, de lehet a tárgytérben is. 38

39 Szakaszok vágása a síkban a normálvektoros ( Cyrus-Beck) eljárás Adott egy félsík h határa: h= ( R, n ) Adott: egy PQ szakasz Keressük a PQ szakasznak a fél-síkba eső részét (itt: PM)

40 „Triviális vizsgálatok” sg( X ) = n٠(X - R) (előjele) sg(P) ≥ 0, ha P a félsíkban < 0, ha P azon kívül van. Ha sg(P) és sg(Q) ≥ 0: mindkettő belül; a szakasz „triviálisan látható” Ha sg(P) és sg(Q) < 0: mindkettő kívül, a szakasz „triviálisan eldobható” Különben: „vágni kell”: M := h × PQ

41 M kiszámítása: M a h egyenesen: (M - R) ٠n = 0, (1) (m x - r x ) ٠n x + (m y - r y ) ٠n y = 0 M a PQ szakasz egyenesén : M = P + t ٠(Q - P), t valós m x = p x + t ٠(q x – p x ) (2) m y = p y + t ٠(q y – p y ) (3) 3-3: t, m x, m y ; megoldás mindig van!!! (miért??)

42 Megjegyzések: Tetszőleges konvex n-szögre: n-szer, egymásután. Tengelyállású téglalapra: 4-szer; de! n = (0,  1), illetve (  1,0) n ٠ v = n 2, illetve = n 1 !!!! A térben: szakasz vágása fél-térre; (M - R) ٠ n = 0 1 skalár-egyenlet és M = P + t ٠(P – Q) 3 skalár-egyenletet ad 4 ismeretlen: t, m x, m y, m z ; megoldás mindig van!!! Téglatestre, tetszőleges konvex sokszöglapra (poliéderre)

43 Szakaszok vágása; Cohen-Sutherland eljárás Adott egy téglalap határaival: x = b, j, y= a, f Adott: a PQ szakasz Keressük a PQ szakasz téglalapba eső részét.

44 A végpontok BAJF-kódja: BAJF( X ) = 0000, ha belül 1xxx, ha balra kinn x1xx ha alul kinn xx1x, ha jobbra kinn xxx1, ha fölül kinn Egy vagy két 1-es BAJF( X ) : négy összehasonlítással „Triviális vizsgálatok”: ha BAJF( P ) = 0 és BAJF( Q ) = 0: „triviálisan belül” ha BAJF( P ) & BAJF( Q )  0 : „triviálisan eldobható” különben „vágni” kell

45 „Vágás”: a kintiek helyett határpontok P és Q bitjein balról jobbra haladva (vagy más sorrendben) ahol 1-es van azzal a határral vágunk; Új végpont és a BAJF-kódot újraszámoljuk Legfeljebb 4 lépésben: a vágott szakasz vagy 0 (!): lehet nem triviálisan is eldobható!

46 46 Sokszöglemez (poligon) vágása Csúcspontok: { P i } Vágás egy-egy határral { P i }  { Q j }; P 1  Q i, M 1  Q 2 ( P 2 ) M 2  Q 3, P 3  Q 4, M 3  Q 5, P 4, M 4  Q 6, P 5  Q 7

47 47 Sokszöglemez (poligon) vágása - 2 Konvex, konkáv, önmetsző A „fűrész” A „kígyó” { P i, M k }  ’ { Q j }; és { M k } külön is; majd rendezés páros-páratlan összekötés

48 Vágás – „látnivalók” http://www.codeguru.com/cpp/misc/ misc/graphics/article.php/c8965/   http://www.cc.gatech.edu/grads/h/Ha o-wei.Hsieh/Haowei.Hsieh/mm.html   Demo  

49 Másfajta elemek vágása Sokszögvonal: szakaszok egyenként Pontjelölők: (ízlés szerint): (a) vagy az egész látszik, vagy semmi, (b) ha a jelölt pont látszik, akkor a jelölő is, (c) a jel vonalankénti vágása. Feliratok: (ízlés szerint): az egész vagy semmi, ha a jelölt pont …, vágás betűnként, vagy pálcánként Raszteres pontlapok: maszkolás stb. Összetett elemeknek először a befoglaló dobozát vágjuk

50 50 Térbeli elemek vágása Normálvektoros vágás: fél-tér, téglatest, konvex soklap (poliéder) például: a nézetmező; csonkagúla Cohen-Sutherland: téglatest, 27 mező, BAJFEH -kód Mélység-vágás: a Z tengelyre merőleges „közelsík” és „távolsík” Oldal-vágás: a csonka-gúla oldalaival az XZ ás YZ síkbeli vetületben vághatunk


Letölteni ppt "4. A grafikus szerelőszalag - áttekintés 4.0. Bevezetés."

Hasonló előadás


Google Hirdetések