Upload
zack
View
65
Download
1
Embed Size (px)
DESCRIPTION
4. A grafikus szerelőszalag - áttekintés 4.0. Bevezetés. A g rafikus szerelőszalag: a képet előállító műveletek sorozata, grafikus szerel ő szalag = viewing pipeline „cs ő vezeték”. 2. Az elemző-építő program – modellt épít. · APRO - al kalmazási program, - PowerPoint PPT Presentation
Citation preview
4. A grafikus szerelőszalag -áttekintés
4.0. Bevezetés
2
A grafikus szerelőszalag:
a képet előállító műveletek sorozata,
grafikus szerelőszalag =
viewing pipeline
„csővezeték”
3
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”
4
A modell adatszerkezete - bejárható
• Színtér
l
| __ tárgy1 __ . . . __ tárgyn __ { nil } // tárgyak
l . . . l
l__ lap1 __ . . . __ lapm __ { nil } // lapok
l . . . l
l__ P1 __ P2 __ P3 __ { nil } // pontok
l . . . . . . (vertices)
l
l __ { x y z [ w ] }
Térbeli „képelemek”
• 3 koordináta
• háromszög-sáv
• legyező
• Négyszög-sáv
• négyszögháló
A grafikus alapszoftver - rajzol
• BGI (és mások): KKR-ben, 2D
• Windows GDI, DirectDraw KKR-ben, 2D
• OpenGL – SKR VKRKKR, 3D alapszoftver
• Grafikus munkaállomások:
egyes műveletek hardverben (förmver-ben
pl. a láthatóság
• Néha a GM rendszerekbe is beépítve.
7
Az elemző-építő program – „néha” rajzol
APRO - alkalmazási program,
GM - geometriai modell
GRASZ - grafikus alapszoftver:
- feladata: rajzolás („bármit”)
- működése:
műveletek sorozata:
a „szerelőszalag”
8
Grafikus szerelőszalag:
a kép előállításának műveletei;
műveletek sorozata
„grafikus szerelőszalag”
(viewing pipeline, „csővezeték”)
9
A 2D szerelőszalag műveletei
• Geometriai modell – építés, elemzés, módosítás
• 0. Képelemek kiválogatása (amit APRO rajzolni akar)1. Képelemek előkészítése: helyettesítés és elhelyezés 2. Leképezés: VKR KKR (3D 2D) 3. Képkivágás: a kereten kívüliek elhagyása4. 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
= ( Utó · Raszko · Láthat · Vág · Lekép · Előkész ) · P
procedure GdrawLine( P,Q : Gpoint );
{ Egyenes szakasz kirajzolása }
begin
map_To_WCS(P,P1); // előkészítés
map_To_WCS(Q,Q1);
map_To_SCS(P1,U); // Leképezés
map_To_SCS(Q1,V);
c_Flag := clip_Line( U,V ); // Vágás
if ( clipFlag ) then
G_draw_Line(U1,V1); // Raszter-konv.
end;
12
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
14
15
A képelemek előkészítése
• Rajzoláskor:
APRO bejárja a geometriai modellt,
kiválogatja 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 ( i. és ii.)
16
Előkészítés: (1) helyettesítés, . . .
• A modell geometriai elemeithelyettesí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
Előkészítés: (2) elhelyezés: SKR VKR
P’ = M · P ; M = T S R
Az ablak
A nagy fal
• Nagyfal =
nagypanel +
M00 · ablak +
M01 · ablak +
M02 · ablak
Moi = T · R · S
Egy ház
• Ház =
M05 · Nagyfal +
M06 · kisfal +
M07 · Nagyfal +
M08 · kisfal
…
• Ház =
M05 · Nagyfal +M06 · kisfal +M07 · Nagyfal +M08 · kisfal =
M05 · ( nagypanel + M00 · ablak + M01 · ablak + M02 · ablak ) + M06 · ( kispanel + M03 · ablak + M04 · ablak) +. . .
Házsor
Elhelyező transzformáció: hasonlóság
SKR VKR; M = T S R
A modell-fa bejárása
Lakótelep = házsor + házsor + házsor =
= ( ház + ház + ház ) + ( ház + ház + ház ) + ( ház + ház + ház )
= ( (nagyfal + kisfal + nagyfal + kisfal + tető) + (nagyfal + kisfal + nagyfal + kisfal + tető) + (nagyfal + kisfal + nagyfal + kisfal + tető) ) + . . .
= ( ( ( nagypanel + ablak + ablak + ablak ) + …
illetve:
M12 · M09 · M05 · ( nagypanel + M00 · ablak + M01 · ablak + M02 · ablak )
amikor sorra kerül: M12 · M09 · M05 · M02 · ablak
Egy másik példa
2626
Egy (másik) Elhelyező transzformáció
• H: Saját KR-jébenK: az ő Saját KR-jében
• K’ = K + i (Ni٠H) // lukas kereszt
• S = V + j [ Mj ٠ K’ ] = // a sáv
= V + j [ Mj ٠ ( K + Si Ni ٠H ) ]
• Mj , Ni: elhelyező transzformációk
2727
• Egy dőlt kereszt rajzolása
T := Mj; draw T K; push T;
for i:= 1 to 4 do
T := stacktop; T := T Ni; draw T H; end // for i;
pop T;
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
29
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)
• alakzatok pontjainak transzformációja
• a pontok helyvektorának szorzása
a leképezés mátrixával:
P’ = MM · P = ( m11 m12 m13 m14 ) · ( x )
| m21 m22 m23 m24 | | y |
| m31 m32 m33 m34 | | z |
( m41 m42 m43 m44 ) ( h )
2D Leképezés: VKR KKR
• Nézetmező (keret), tárgytér: { Kba, Kjf }
• Képmező, képtér: { Mba, Mjf }
• Leképezés: u = a · x + b, v = c · y + d
32
2D Leképezés:
• minden új leképezésnél beállítás :
GsetWorldFrame ( Kba, Kjf : Gpoint2 );
GsetScreenViewPort( Mba, Mjf : Gpixel );
• minden képelemnél a leképezés :
GmapWorldToScreen(Pv:Gpoint2; Pk:Gpixel);
2D Leképezés: VKR KKR
• Matematikai modell:
• u = a · x + b, v = c · y + d;
• a = du / dx; c = dv / dy; ( < 0 )
• dx = kj - kb, dy = kf - kl, du = mj - mb, dv = mf - ml;
• b és d: Kba Mba –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
33
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)
3D Leképezések
1. Párhuzamos vetítés koordináta-síkra merőlegesen
2. Párhuzamos vetítés koordináta-síkra ferde irányban
3. Párhuzamos vetítés általános helyzetben
4. Középpontos vetítés az XY síkra
5. Középpontos vetítés általános helyzetben
3D Leképezések -1 Párhuzamos vetítés koordináta-síkra
merőlegesen
• Párhuzamos és merőleges vetítés
MM = EE
• A tárgy az XY síkon áll,
erre merőlegesen vetítünk:
a z -t elhagyjuk
• Más helyzetű tárgy esetén:
eltolás-forgatással . . .
3D Leképezések -2 Ferde vetítés koordinátasíkra párhuzamoan
• A vetítés iránya: v = (vx, vy, vz); vz 0
• A vetítő egyenesek egyenlete: X (x, y, z) = P + t · v x = px + t · vx
y = py + t · vy
z = pz + t · vz ( = 0 )
• Döféspont a vetületi síkon z’ = 0 : t = - pz / vz (vz 0)
x’ = px+ t · vx = px - pz · ( vx / vz )
y’ = py+ t · vy = py - pz · ( vy / vz )
Ferde vetítés mátrixal:
• Nyírással merőleges vetítéssé:
P’ = NN xy · P ; (3D3D)
= ( 1 0 -vx/vz 0)·(px)
| 0 1 –vy/vz 0| |py| | 0 0 1 0| |pz| ( 0 0 0 1| ( 1 )
= [ px - (pz / vz) · vx , py - ( pz / vz) · vy , pz , 1]
( px - (pz / vz) · vx , py - ( pz / vz) · vy ) ; vz :=0
• Nyírás: a 3D alak torzul, de ettől jó a 2D vetület
3D Leképezések – 3általános helyzetben: transzformációk a
vetítés előtt
• „elhelyező transzformáció
• forgatás, elhelyezés;
hasonlósági transzformációk
• Feladat: a VKR-ben adott test
vetítése egyik fő sikjára
• A tárgy jellemző KR-e: TKR;
• megadása VKR-ben: R, u, v, w
• VKRTKR : P’ = ( T T · B B ) · P; ezután:
40
3D-3D leképezések
• 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 : olyan 3D 3D leképezés, hogy a végén az XY síkra merőleges vetület a kívánt sík-vetület legyen
41
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
3D Leképezések - 4
Középpontos vetítés az XY síkra
(A kamera koordináta-rendszerében)
43
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]
44
• 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) )
45
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ő
3D Leképezések – 5általános helyzetben: transzformációk a
vetítés előtt
• „elhelyező transzformáció
• forgatás, elhelyezés;
hasonlósági transzformációk
• Feladat: a VKR-ben adott test
vetítése a „Z tengely irányában
• A tárgy jellemző KR-e: TKR;
• megadása VKR-ben: R, u, v, w
• VKRTKR : P’ = ( T T · B B ) · P; ezután:
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
48
49
4.3. Vágás
• A képkereten kívüli részek elhagyása
(vagy csak megjelölése)
50
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.
51
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)
„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
M kiszámítása:
• M a h egyenesen:
(M - R) ٠n = 0, (1)
(mx - rx) ٠nx + (my - ry) ٠ny = 0
• M a PQ szakasz egyenesén :
M = P + t ٠(Q - P), t valós
mx = px + t ٠(qx – px) (2)
my = py + t ٠(qy – py) (3)
• 3-3: t, mx, my; megoldás mindig van!!! (miért??)
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 = n2, illetve = n1 !!!!
• A térben: szakasz vágása fél-térre;
(M - R) ٠ n = 0 1 skalár-egyenlet ésM = P + t ٠(P – Q) 3 skalár-egyenletet ad4 ismeretlen: t, mx, my, mz; megoldás mindig van!!!
• Téglatestre, tetszőleges konvex sokszöglapra (poliéderre)
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.
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
• „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ó!
59
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
60
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
NB.: A Fermat-spirál:
Vágás – „látnivalók”
• http://www.codeguru.com/cpp/misc/misc/graphics/article.php/c8965/
• http://www.cc.gatech.edu/grads/h/Hao-wei.Hsieh/Haowei.Hsieh/mm.html
• Demo
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
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