4. a grafikus szerelőszalag - áttekintés 4.0. bevezetés

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

Upload: zack

Post on 14-Jan-2016

59 views

Category:

Documents


1 download

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

TRANSCRIPT

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

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

4.0. Bevezetés

Page 2: 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”

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

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”

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

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 ] }

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

Térbeli „képelemek”

• 3 koordináta

• háromszög-sáv

• legyező

• Négyszög-sáv

• négyszögháló

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

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.

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

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”

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

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”)

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

9

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

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

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

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;

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

12

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

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

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

14

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

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.)

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

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

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

Előkészítés: (2) elhelyezés: SKR VKR

P’ = M · P ; M = T S R

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

Az ablak

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

A nagy fal

• Nagyfal =

nagypanel +

M00 · ablak +

M01 · ablak +

M02 · ablak

Moi = T · R · S

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

Egy ház

• Ház =

M05 · Nagyfal +

M06 · kisfal +

M07 · Nagyfal +

M08 · kisfal

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

• Ház =

M05 · Nagyfal +M06 · kisfal +M07 · Nagyfal +M08 · kisfal =

M05 · ( nagypanel + M00 · ablak + M01 · ablak + M02 · ablak ) + M06 · ( kispanel + M03 · ablak + M04 · ablak) +. . .

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

Házsor

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

Elhelyező transzformáció: hasonlóság

SKR VKR; M = T S R

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

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

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

Egy másik példa

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

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

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

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;

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

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

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

29

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

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 )

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

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

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

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);

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

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

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

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)

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

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

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

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 . . .

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

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 )

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

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

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

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:

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

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

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

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

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

3D Leképezések - 4

Középpontos vetítés az XY síkra

(A kamera koordináta-rendszerében)

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

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]

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

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) )

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

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ő

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

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:

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

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

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

48

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

49

4.3. Vágás

• A képkereten kívüli részek elhagyása

(vagy csak megjelölése)

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

50

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

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

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

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)

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

„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

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

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??)

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

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)

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

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.

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

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

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

• „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ó!

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

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

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

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

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

NB.: A Fermat-spirál:

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

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

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

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

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

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