Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaBertalan Pataki Megváltozta több, mint 9 éve
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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.