• Nem Talált Eredményt

Valós idejű háromdimenziós grafika és képfeldolgozás

N/A
N/A
Protected

Academic year: 2022

Ossza meg "Valós idejű háromdimenziós grafika és képfeldolgozás"

Copied!
410
0
0

Teljes szövegt

(1)

Írta: Nagy Attila, Kárász Péter, Miklós Árpád, Vámossy Zoltán

VALÓS IDEJŰ

HÁROMDIMENZIÓS GRAFIKA ÉS KÉPFELDOLGOZÁS

PÁRHUZAMOS SZÁMÍTÁSTECHNIKA MODUL

PROAKTÍV INFORMATIKAI MODULFEJLESZTÉS

Lektorálta: oktatói munkaközösség

(2)

COPYRIGHT:

2011-2016, Nagy Attila, Kárász Péter, Miklós Árpád, Vámossy Zoltán, Óbudai Egyetem, Neumann János Informatikai Kar

LEKTORÁLTA: oktatói munkaközösség

Creative Commons NonCommercial-NoDerivs 3.0 (CC BY-NC-ND 3.0)

A szerző nevének feltüntetése mellett nem kereskedelmi céllal szabadon másolható, terjeszthető, megjelentethető és előadható, de nem módosítható.

TÁMOGATÁS:

Készült a TÁMOP-4.1.2-08/2/A/KMR-2009-0053 számú, “Proaktív informatikai modulfejlesztés (PRIM1): IT Szolgáltatásmenedzsment modul és Többszálas processzorok és programozásuk modul” című pályázat keretében

KÉSZÜLT: a Typotex Kiadó gondozásában FELELŐS VEZETŐ: Votisky Zsuzsa

ISBN 978-963-279-564-5

2

(3)

KULCSSZAVAK:

animáció, árnyaló, Direct3D, futószalag, GPU, grafika, háromdimenziós, képalkotás, képfeldolgozás, képszintézis, megjelenítés, modellezés, utófeldolgozás, valós idejű

ÖSSZEFOGLALÓ:

A hallgatók rövid áttekintést kapnak a számítógépes grafika történetéről, majd

megismerkednek a különböző grafikai szabványokkal (Direct3D és OpenGL), illetve a háromdimenziós képszintézis folyamatával. Továbbá ismereteket szereznek a modern háromdimenziós megjelenítést használó alkalmazások működésével kapcsolatban, és maguk is képesek lesznek ilyenek fejlesztésére (Direct3D). Megismerkednek a fix funkciós valamint a programozható futószalag működésével, lehetőségeivel és jellemzőivel.

Bevezetést kapnak a HLSL nyelven írt árnyalók (shaderek) működéséről, és megismerik azok szerkezetét és használatát. Szó esik a modern alkalmazásokban használt speciális megjelenítési technikákról is. Ezek közül néhány az órai példaprogramok keretében implementálásra kerül. Végül elsajátítják a képfeldolgozás alapszintű ismereteit, és ezeket korszerű pixel árnyalókra épített utófeldolgozó technikákon keresztül a gyakorlatban is kipróbálják.

(4)

Tartalomjegyzék

► A számítógépes grafika alapjai

► Képszintézis

► Grafikai szabványok

► Bevezetés a Direct3D használatába

► A fix funkciós futószalag

► További megjelenítési lehetőségek

► A programozható futószalag

► A programozható futószalag használata

► Komplexebb megjelenítési technikák

► Képfeldolgozás és utófeldolgozás

© Nagy Attila és társai, ÓE NIK 4 www.tankonyvtar.hu

(5)

A számítógépes grafika alapjai

Történeti áttekintés Képalkotási módok

Valós idejű megjelenítés és animáció

(6)

Tartalomjegyzék

► Történeti áttekintés

► Képalkotási módok

► Valós idejű megjelenítés és animáció

© Nagy Attila és társai, ÓE NIK 6 www.tankonyvtar.hu

(7)

Tartalomjegyzék

► Történeti áttekintés

► Képalkotási módok

► Valós idejű megjelenítés és animáció

(8)

© Nagy Attila és társai, ÓE NIK www.tankonyvtar.hu

Történeti áttekintés

8

(9)

Történeti áttekintés (1)

► Számítógépes grafika

 Egészen az 1960-as évekig nyúlik vissza.

 Kezdetben csak kutatóközpontokban és nagyvállalatoknál alkalmazták.

 Idővel megjelent a filmiparban is.

 1981: Az IBM piacra dobta az első mikroszámítógépet.

► Különálló videovezérlőt tartalmazott (MDA, CGA).

(10)

Történeti áttekintés (2)

► A videovezérlők fejlődésének főbb állomásai:

 MDA: Monochrome Display and Printer Adapter (1981)

► csak karakteres megjelenítést támogatott (80x25)

► 4 kByte memória

 CGA: Color Graphics Adapter (1981)

► Max. 640 x 200-as felbontás + monokróm vagy 320 x 200-as felbontás + 4 szín

► 16 kByte memória

 HGC: Hercules Graphics Card (1982)

► Max. 720 x 384-es felbontás, 2 szín

► 32 kByte memória, 4 db 8 kByte-os memóriaterületből (lapok)

 EGA: Enhanced Graphics Adapter (1984)

► Max. 640 x 350-es felbontás, 16 szín egyidejűleg (64 színű palettáról)

► Bővíthető memória: 64 kByte – 256 kByte

 MCGA: Multi Color Graphics Array (1987)

► Hasonló felépítésű, mint az EGA

© Nagy Attila és társai, ÓE NIK 10 www.tankonyvtar.hu

(11)

Történeti áttekintés (3)

 VGA: Video Graphics Array (1987)

► A mai napig szabványnak tekinthető!

► Az összes előd szöveges és grafikus módjait támogatja.

► Max. 640 x 480, 800 x 600, 16 szín

► 320 x 200, 256 szín (262 144 színű palettáról)

► Több lap támogatása (dupla pufferelés, osztott

képernyő stb.)

(12)

Történeti áttekintés (4)

► SVGA: Super Video Graphics Array (1987)

 800 x 600 (16 szín) illetve 1024 x 768 (256 szín)

 A VGA után egyre több grafikus op. rendszer, alkalmazás és játék jelent meg.

 Igény mutatkozott nagyobb felbontású, színmélységű módokra.

 Számos gyártó kezdett SVGA-kártyákat

gyártani, de ezek nem voltak szabványosak.

© Nagy Attila és társai, ÓE NIK 12 www.tankonyvtar.hu

(13)

Történeti áttekintés (5)

► VESA: Video Electronics Standard Association (1989)

 Szabványosította a videokártyák programozási felületét.

 Időleges megoldást biztosított, a 3D-gyorsítók

terjedésével újabb problémák jelentkeztek.

(14)

Történeti áttekintés (6)

► További modern videovezérlő szabványok:

 XGA: Extended Graphics Array (1990)

► 800 x 600, 65 536 szín (16 bit)

► 1024 x 768, 256 szín (8 bit)

 WXGA (1280 × 768)

 XGA+ (1152 × 864)

 WXGA+ (1440 × 900)

 SXGA (1280 x 1024)

 SXGA+ (1400 × 1050)

 WSXGA+ (1680 × 1050)

 UXGA (1600 × 1200)

 WUXGA (1920 × 1200)

© Nagy Attila és társai, ÓE NIK 14 www.tankonyvtar.hu

(15)

A 3D grafika története (1)

► ‘70-es évek: Megjelentek az első CGI*-t felhasználó filmek (Futureworld, 1976).

► ‘80-as évek: Megszülettek az első 3D grafikát felvonultató játékok.

3D Monster Maze (1981)

Sinclair ZX81

*CGI = Computer Generated Imagery

Tron (1982)

(16)

A 3D grafika története (2)

► 1995-ben megjelentek az első 3D-gyorsítók (nVidia NV1, S3 Virge).

► Rengeteg gyártó kezdett versenyezni:

 3Dfx, ATI, Intel, nVidia, Matrox, Rendition, S3 stb.

► Folyamatos és rendkívül gyors fejlődés ment végbe.

► Mára 2 óriás cég maradt: ATI, nVidia

© Nagy Attila és társai, ÓE NIK 16 www.tankonyvtar.hu

(17)

A 3D grafika története (3)

► A verseny következménye:

 A GPU* képességeinek javulása

► Háromszög/s arány javul

► Memória mérete nő

► Memória sávszélessége nő

► Memória órajele nő

► A teljesítmény-felvétel nő

 Új megjelenítési technikák elterjedése

 Fokozatosan egyre több művelet tevődik a grafikus hardverre.

*GPU = Graphics Processing Unit

(18)

A 3D grafika története (4)

► 1995–2001

 A 3D-gyorsítókba előre beprogramozták, milyen megjelenítési technikákat képesek támogatni

(pl.: textúrázás, megvilágítás, átlátszóság stb.).

 Folyamatosan nőtt az igény az újabb és újabb megjelenítési technikákra.

Ezt a megvalósítást fix funkciós futószalagnak nevezik (fixed function pipeline vagy röviden FFP).

© Nagy Attila és társai, ÓE NIK 18 www.tankonyvtar.hu

(19)

A 3D grafika története (5)

► 2001 óta

 Lehetőség nyílik saját megjelenítési technikák megvalósítására.

 Közvetlenül a videokártyán futó programokat (ún. shadereket) lehet készíteni.

 A shaderekkel helyettesíthetők a korábban fixen beépített funkciók.

Ezt a megvalósítást programozható futószalagnak nevezik

(programmable pipeline vagy röviden PP).

(20)

A 3D grafika története (6)

► A jelen

 A gyors fejlődés következtében a GPU-k

számítási kapacitása meghaladta a CPU-két.

 GPGPU: General-purpose computing on GPU

► Általános célú műveletek végzése GPU-n

► Nagy számításigényű műveletek végrehajtása

► Pl.: adatbázis műveleteket, képfeldolgozást, fizikai szimulációt és mesterséges intelligenciához

kapcsolódó számításokat is végeznek a GPU segítségével.

© Nagy Attila és társai, ÓE NIK 20 www.tankonyvtar.hu

(21)

Tartalomjegyzék

► Történeti áttekintés

► Képalkotási módok

► Valós idejű megjelenítés és animáció

(22)

© Nagy Attila és társai, ÓE NIK www.tankonyvtar.hu

Képalkotási módok

22

(23)

Képalkotási módok

► Képalkotási (render) mód:

 Az az eljárás, ahogy a virtuális 3D világról pillanatképet alkotunk és a monitoron

megjelenítjük azt.

 A virtuális világ 3D térben adott, a monitor 2D képek megjelenítésére alkalmas (leképzés).

► Főbb képalkotási módok:

 Sugárkövetés (ray tracing)

 Globális illumináció

 Inkrementális képszintézis

(24)

Sugárkövetés (1)

► Elve

 A fotonok útvonalát követi végig a kamerától minden pixelből kiindulva.

 A fotonok követését fizikai szabályok alapján végzi (fénytörés, visszaverődés).

► Előnye

 Jól illeszkedik a valósághoz.

 Önmagában megoldja a takarás, az árnyalás,

árnyékolás, átlátszóság, fénytörés stb. problémáit.

► Hátránya

 Nagy számításigény, nem valós idejű megjelenítés.

© Nagy Attila és társai, ÓE NIK 24 www.tankonyvtar.hu

(25)

Sugárkövetés (2)

A sugárkövetés nagyon valósághű képeket képes produkálni (nincs szükség „trükközésre”).

Forrás: [3]

(26)

Globális illumináció (1)

► A sugárkövetés hiányosságai

 Nem foglalkozik a fotonok többszörös visszaverődésével.

 A fényforrásokat osztályokba sorolja (pontszerű,

irányított, reflektor), amik a valóságban nem léteznek.

 A színek nemcsak az R, G, B, hanem a teljes látható színtartomány hullámhosszain terjedhetnek.

► Bizonyos alkalmazásokban szükséges pontosabb képalkotási technika

 Világítástervezés

 Egyéb mérnöki alkalmazások

© Nagy Attila és társai, ÓE NIK 26 www.tankonyvtar.hu

(27)

Globális illumináció (2)

Nincs globális illumináció Van globális illumináció

Forrás: [4]

(28)

Inkrementális képszintézis (1)

► Elve

 Újrahasználja a szomszédos pixelekre kiszámított attribútumokat (szín, mélység).

 Nem minden pixelre külön végződnek a számítások, szemben a sugárkövetéssel.

 A világban megjelenő objektumokat csúcspontokkal és sokszögekkel írja le.

 Megjelenítéskor a 3D csúcspontok vetítődnek a 2D képernyőre.

 A vetített 2D csúcspontok közti pixelek attribútumai interpolációval határozódnak meg!

© Nagy Attila és társai, ÓE NIK 28 www.tankonyvtar.hu

(29)

Inkrementális képszintézis (2)

► Előnye

 Valós idejű megjelenítés érhető el vele!

 A korszerű GPU-k ezt a technikát használják.

 Hardveresen gyorsított!

► Hátránya

 A számítások egyszerűsítése miatt az előálló kép nem realisztikus!

 Speciális megjelenítési technikák szükségesek a generált kép minőségének javítására!

 Nekünk kell gondoskodni az árnyalásról, árnyékokról, az

átlátszóságról stb.

(30)

Inkrementális képszintézis (3)

► Speciális megjelenítési technikák

 Takarásvizsgálat (Z-buffering)

 Megvilágítás (Ambient/diffuse/specular lighting)

 Textúrázás (Texture mapping)

 Ködmegjelenítés (Volumetric fog)

 Árnyékmegjelenítés (Shadow volume/mapping)

 Átlátszóság/színkeverés (Alpha Blending)

 Tükröződés (Reflection mapping)

 Mélységérzékeltetés (Depth-of-field)

 Pixelenkénti megvilágítás (Bump/Normal mapping)

 Stb.

© Nagy Attila és társai, ÓE NIK 30 www.tankonyvtar.hu

(31)

Inkrementális képszintézis (4)

Flat shading Gouraud shading Phong shading

(32)

Inkrementális képszintézis (5)

A mai 3D játékok is inkrementális képszintézissel képesek látványos megjelenítésre (speciális megjelenítési technikák).

© Nagy Attila és társai, ÓE NIK 32 www.tankonyvtar.hu

(33)

Tartalomjegyzék

► Történeti áttekintés

► Képalkotási módok

► Valós idejű megjelenítés és animáció

(34)

© Nagy Attila és társai, ÓE NIK www.tankonyvtar.hu

Valós idejű megjelenítés és animáció

34

(35)

Valós idejű megjelenítés (1)

► Animáció: Apró eltéréseket ábrázoló

állóképek sorozata megfelelő sebességgel váltogatva.

► Képkocka (frame): Egy kép az animáció során megjelenített állókép sorozatból.

► Az emberi szem kb. 25–30 képet képes

érzékelni másodpercenként.

(36)

Valós idejű megjelenítés (2)

► A másodpercenként rajzolt képkockák

mérőszáma az FPS (Frames Per Second).

► A valós idejű megjelenítés

 Másodpercenként legalább 25 képkocka (25 FPS)

 Követelmény: 1000 ms alatt legalább 25

képkocka, azaz 1000 ms /25 = 40 ms/ képkocka

© Nagy Attila és társai, ÓE NIK 36 www.tankonyvtar.hu

(37)

Valós idejű megjelenítés (3)

► Valós idejű megjelenítésről beszélünk, ha a 3D világ egy képkockáját legfeljebb 40 ms alatt ki tudjuk rajzolni!

► Másként: ha az animáció sebessége

legalább 25 FPS!

(38)

Összegzés

Valós idejű háromdimenziós grafika

A kép előállítása max. ~40 ms (25 FPS)

© Nagy Attila és társai, ÓE NIK 38 www.tankonyvtar.hu

(39)

Irodalomjegyzék

[1] Szirmay-Kalos L., Antal Gy., Csonka F.: Háromdimenziós grafika, animáció és játékfejlesztés, Computerbooks, 2003

[2] Nyisztor K.: Grafika és játékprogramozás DirectX-szel, SZAK Kiadó, 2005

[3] Wikipedia, Raytracing, http://en.wikipedia.org/wiki/Ray_tracing_(graphics)

[4] Wikipedia, Global illumination, http://en.wikipedia.org/wiki/Global_illumination

(40)

Képszintézis

Alapelvek

A képszintézis lépései

© Nagy Attila és társai, ÓE NIK 40 www.tankonyvtar.hu

(41)

Tartalomjegyzék

► Alapelvek

► A képszintézis lépései

(42)

Tartalomjegyzék

► Alapelvek

► A képszintézis lépései

© Nagy Attila és társai, ÓE NIK 42 www.tankonyvtar.hu

(43)

Alapelvek

(44)

Az inkrementális képszintézis elvei (1)

1. Pixelek helyett az objektumtér nagyobb elemeivel dolgozik (pl. poligonok).

2. Ahol lehet alkalmazza az ún. inkrementális elvet.

 A pixelek mélységi és szín információit a

megelőző pixeléből kiindulva határozza meg.

 Kevesebb számítás

© Nagy Attila és társai, ÓE NIK 44 www.tankonyvtar.hu

(45)

Az inkrementális képszintézis elvei (2)

3. Minden feladatot abban a koordináta- rendszerben végez el, amiben a

legegyszerűbben megtehető.

 Ennek érdekében az objektumok felületeit sokszögekkel közelíti (tesszelláció).

 A koordináta-rendszerek közt lineáris geometriai transzformációval vált.

4. Feleslegesen nem számol

 A képernyőn biztosan nem látható geometriai

elemeket, illetve azok részeit eltávolítja (vágás).

(46)

► Jellemzői

 Az egyszerűsítő elveknek köszönhetően valós idejű megjelenítést biztosít, de romlik a

képminőség.

 A csökkenő képminőség ellensúlyozásához

speciális megjelenítési technikákra lesz szükség!

► Következmény

 A valós idejű 3D grafikus alkalmazások inkrementális képszintézist használnak.

© Nagy Attila és társai, ÓE NIK 46 www.tankonyvtar.hu

(47)

Tartalomjegyzék

► Alapelvek

► A képszintézis lépései

(48)

A képszintézis lépései

© Nagy Attila és társai, ÓE NIK 48 www.tankonyvtar.hu

(49)

A képszintézis lépései (1)

1. Modellezés

 A megjelenítendő alakzatok elkészítése valamilyen modellezési módszerrel.

2. Tesszelláció

 A modellezett alakzat felületéből közelítő poligonháló ( mesh ) előállítása.

3. Modellezési transzformáció

 A poligonhálók elhelyezése a virtuális térben.

4. Nézeti transzformáció

 A virtuális kamera elhelyezkedéséből adódó

transzformációk elvégzése.

(50)

Az inkrementális képszintézis lépései (2)

5. Perspektív transzformáció

 A 3D csúcspont ( vertex ) koordináták vetítése a képernyő koordináta-rendszerébe.

6. Vágás

 A képernyőn nem látszódó részletek eldobása.

7. Takarási feladat

 Triviális hátsólap eldobás

 Mélységi puffer algoritmus 8. Árnyalás

 A képernyőn megjelenő pixel színek meghatározása anyag és megvilágítás függvényében.

© Nagy Attila és társai, ÓE NIK 50 www.tankonyvtar.hu

(51)

Modellezés

► Erről az elméleti órán esik szó…

(52)

Tesszelláció

► Az elkészített modell felületének közelítése sokszögekkel.

► A sokszögek csúcspontjai ( vertex ) tárolják az objektumfelület adott pontjának adatait:

 3D koordináta

 Normálvektor

 Anyagjellemzők (szín, textúra koordináták stb.)

 Stb.

© Nagy Attila és társai, ÓE NIK 52 www.tankonyvtar.hu

(53)

Transzformációk

Nézeti mátrix

Vetítési mátrix objektum

Objektumkoordináta-rendszer (object space)

Világkoordináta-rendszer (world space)

Kamerakoordináta-rendszer (view space)

Képernyő Világ mátrix

Képernyőkoordináta-rendszer (screen space)

A kamera nézőpontjából tekintett koordináta-rendszer. Minden objektumot a kamerához képest relatív koordináta-rendszerbe helyez el.

Az összes objektumot azonos koordináta-rendszerbe, az ún. világ- koordináta-rendszerbe, vagy röviden a világtérbe helyezi.

Az egyes objektumok saját koordináta-rendszere, amiben az objektumot modellezték. Minden objektum esetén eltérhet.

Az objektumok a képernyő koordináta-rendszerébe kerülnek. A vetítési mátrixszal való transzformáció befolyásolja, hogy az objektumok csúcspontjai milyen pixel koordinátákra kerüljenek.

(54)

Vágás (clipping)

► Cél

 Azon poligonok eldobása, melyek a nézeti csonka gúlán ( view frustum ) kívülre esnek.

 Az első vágósík előtti és a hátsó vágósík utáni poligonok eldobása.

Vágás előtti állapot Vágás utáni állapot

Forrás: [3]

© Nagy Attila és társai, ÓE NIK 54 www.tankonyvtar.hu

(55)

Takarási feladat (1)

► Triviális hátsólap eldobás ( backface culling )

 Azon poligonok eldobása, melyek a kamerának háttal láthatók.

 Poligonokkal dolgozik

(56)

Takarási feladat (2)

x y

z

n

1

n

2

nézeti csonka gúla

© Nagy Attila és társai, ÓE NIK 56 www.tankonyvtar.hu

(57)

Takarási feladat (3)

► Mélységi pufferelés

( Z-buffering , W-buffering )

 Azon vetített pixelek eldobása, melyet egy

„előtte lévő” kitakar.

 Pixelekkel dolgozik

Később részletesebben!

(58)

Takarási feladat (4)

6553

5 6553

5 6553

5 6553

5 4 ...

1 1 7 8 6553

5 ...

6 7 8 8 1 ...

7 7 1 1 2 ...

6553

5 6553

5 6553

5 6553

5 6553

5 ...

... ... ... ... ... ...

Z-puffer

képernyőtér

© Nagy Attila és társai, ÓE NIK 58 www.tankonyvtar.hu

(59)

Árnyalás (1)

► Cél: Az objektum árnyalásának (színének) meghatározása árnyalási egyenlettel.

► Az árnyalás eredményét az alábbiak befolyásolják:

 Az objektum csúcspontjainak attribútumai

(pl.: szín, normál vektorok, textúra koordináták)

 Az objektum anyaga (színe)

(pl.: szórt, diffúz, spekuláris színösszetevők)

 Az objektum mintája (textúrái)

 A jelenetet megvilágító fényforrások paraméterei

 Speciális technikák alkalmazásakor további tényezők

(60)

Árnyalás (2)

► Az árnyalás alapesetben a csúcspontokra számítódik (per-vertex lighting).

► A köztes pixelekre interpolációval generálódik az árnyalás.

Flat shading Gouraud shading Phong shading

per-vertex

(bilineáris interpoláció)

per-pixel per-vertex

(legközelebbi szomszédok)

© Nagy Attila és társai, ÓE NIK 60 www.tankonyvtar.hu

(61)

Árnyalás (3)

► Árnyalás saját színnel

 Kitöltés az előre megadott színnel.

 Gyors, de teljesen valószerűtlen, mert nem veszi

figyelembe a megvilágítást.

(62)

Árnyalás (4)

► Árnyalás konstans színnel ( flat shading )

 Kitöltés a csúcspontokra kiszámított fényintenzitás alapján.

► OpenGL: átlagolás; DirectX: véletlen kiválasztás

 Gyors, de még mindig valószerűtlen (sík hatást kelt).

© Nagy Attila és társai, ÓE NIK 62 www.tankonyvtar.hu

(63)

Árnyalás (5)

► Gouraud-árnyalás (per-vertex lighting)

 Kitöltés a csúcspontokra kiszámított fényintenzitás alapján.

 A találkozó lapok normálvektoraiból interpolált vektorok tárolása a csúcsok adatai között.

 A színadatok lineáris interpolációján alapul.

 Interpoláció a csúcspontok között  élek pontjainak meghatározása

 Kitöltés az élek pontjai között  minden pont kiszínezése

 Közepesen gyors, az éleket jól simítja, de csak diffúz felületeket jelenít meg valószerűen.

 A spekuláris visszaverődések eltűnhetnek.

 Nemlineáris színváltozások kezelésére alkalmatlan.

(64)

Árnyalás (6)

x

1

, y

1

RGB

1

x

2

, y

2

RGB

2

RGB

a

= (RGB

1

(y

s

-y

2

)+RGB

2

(y

1

-y

s

))/(y

1

-y

2

) RGB

b

= (RGB

1

(y

s

-y

3

)+RGB

3

(y

1

-y

s

))/(y

1

-y

3

) RGB

s

= (RGB

a

(x

b

-x

s

)+RGB

b

(x

s

-x

a

))/(x

b

-x

a

)

x

3

, y

3

RGB

3

x

a

, y

s

x

b

, y

s

x

s

, y

s

ΔRGB

y

= (RGB

1

-RGB

2

)/(y

1

-y

2

) ΔRGB

s

= (RGB

b

-RGB

a

)/(x

b

-x

a

)

© Nagy Attila és társai, ÓE NIK 64 www.tankonyvtar.hu

(65)

Árnyalás (7)

► Phong-árnyalás (per-pixel lighting)

 Kitöltés az összes képpontra külön-külön megoldott árnyalási egyenlet eredményeinek megfelelően.

 Spekuláris összetevő számítása a visszaverődési és a nézeti vektor által bezárt szög alapján.

 A csúcsokban tárolt árnyalási normálvektorok lineáris interpolációján alapul.

 A színtérben nemlineáris interpoláció  pontosabb leképezés

 Rendkívül lassú, de mind a diffúz, mind a spekuláris fényhatásokat valószerűen jeleníti meg.

 Nincs fix hardveres megvalósítása.

 Modern 3D hardverrel megvalósítható („pixel shader”).

 Önkényes a spekuláris összetevőnél alkalmazott függvény.

(66)

Árnyalás (8)

► Phong-árnyalás

x

2

, y

2

, z

2

x

3

, y

3

z

3

x

1

, y

1

, z

1

x

s

, y

s

, z

s

n

2

n

1

n

3

© Nagy Attila és társai, ÓE NIK 66 www.tankonyvtar.hu

(67)

Árnyalás (9)

► Phong–Blinn-árnyalás

 Alapjaiban megegyezik a Phong-árnyalással.

 Az árnyalási normálvektorok interpolációján és az árnyalási egyenlet képpontonkénti megoldásán alapul.

 Módosítások:

► Spekuláris összetevő számítása a megvilágítási és a nézeti vektor felezővektora alapján.

► Gyorsabban kiszámítható a spekuláris összetevő.

► Bizonyos anyagparaméterekkel módosított árnyalási egyenlet.

► Normálvektorok nemlineáris interpolációján alapul.

(68)

Árnyalás (10)

► Példa: Gouraud- és Phong-árnyalás

© Nagy Attila és társai, ÓE NIK 68 www.tankonyvtar.hu

(69)

Árnyalás (11)

► Példa: Phong- és Phong–Blinn-árnyalás

(70)

► A valóságosabb árnyalás érdekében további speciális technikák szükségesek

 Textúrázás

 Átlátszóság

 Árnyékvetítés

 Komplexebb megvilágítás (pl. normal mapping)

 Élsimítás

 Tükröződés

 Köd szimuláció

 Stb.

Később részletesebben!

© Nagy Attila és társai, ÓE NIK 70 www.tankonyvtar.hu

(71)

Irodalomjegyzék

[1] Szirmay-Kalos L., Antal Gy., Csonka F.: Háromdimenziós grafika, animáció és játékfejlesztés, Computerbooks, 2003

[2] Nyisztor K.: Grafika és játékprogramozás DirectX-szel, SZAK Kiadó, 2005 [3] Eckel G., Kempf R., and Wennerberg L., OpenGL Optimizer™ Programmer's

Guide: An Open API for Large-Model Visualization, Silicon Graphics inc,

1998

(72)

Grafikai szabványok

Bevezetés

Ismerkedés a Direct3D API-val Direct3D-alkalmazások szerkezete

.NET wrapperek

© Nagy Attila és társai, ÓE NIK 72 www.tankonyvtar.hu

(73)

Tartalomjegyzék

► Bevezetés

► Ismerkedés a Direct3D API-val

► Direct3D-alkalmazások szerkezete

► .NET wrapperek

(74)

Tartalomjegyzék

► Bevezetés

► Ismerkedés a Direct3D API-val

► Direct3D-alkalmazások szerkezete

► .NET wrapperek

© Nagy Attila és társai, ÓE NIK 74 www.tankonyvtar.hu

(75)

Bevezetés

(76)

Grafikai szabványok

► Céljuk

 A hardversajátosságok elrejtése (eszközfüggettlenség).

 Szabványos programozói felület (API) biztosítása.

► A hardvergyártók és a szabványt biztosító szervezetek közötti együttműködés teszi ezt lehetővé.

► A grafikus API-k implementációi a videokártya driverben találhatók.

► A legelterjedtebb grafikai szabványok

 Direct3D

 OpenGL

► Mindkét API hasonló funkcionalitással bír, eltérő architektúra mellett.

© Nagy Attila és társai, ÓE NIK 76 www.tankonyvtar.hu

(77)

OpenGL (1992–…)

► Eredetileg a Silicon Graphics által kidolgozott szabvány.

► A Khronos Group konzorcium menedzseli.

 Számos hardvergyártó és szoftvercég tagja

(pl.: ATI, Discreet, Intel, nVidia, SGI, Sun stb.)

► Legfrissebb változata az OpenGL 4.1 (2010)

► Procedurális felépítésű (C)

► Bővíthető funkcionalitás (extensions)

(78)

Direct3D (1995–…)

► A DirectX programozói felület részét képzi

► A DirectX a Microsoft által kidolgozott szabvány

► Legfrissebb változata a DirectX 11 (2011.

február)

► Objektumorientált felépítésű (C++)

► Előre definiált funkcionalitás, nem bővíthető

© Nagy Attila és társai, ÓE NIK 78 www.tankonyvtar.hu

(79)

A DirectX klasszikus komponensei

Direct3D: A 3D grafikai lehetőségek kihasználását biztosítja.

DirectDraw*: A 2D grafikai szolgáltatásokat biztosítja.

DirectInput*: Az adatbeviteli eszközök kezelését segíti.

DirectSound*, DirectSound3D*, DirectMusic*: Különféle 2D/3D hanghatások és zenék lejátszását biztosítja.

DirectPlay*: Hálózaton keresztüli kommunikációt biztosít.

DirectShow**: Különböző médiákon elhelyezkedő tartalmak visszajátszását, rögzítését és manipulálását biztosítja (pl.: filmek, zenék, felvevő eszközök stb.).

* A DirectX újabb verzióiban modernebb API váltotta le.

** A DirectShow 2007 óta a Windows SDK-ba került át.

(80)

A DirectX 10 és 11 új komponensei

Direct2D: A DirectDraw komponens váltotta le (2D grafika).

DirectCompute: GPGPU-támogatás

DirectWrite: betűtípusok támogatására

DXGI: megjelenítő eszközök menedzselése

► Stb.

© Nagy Attila és társai, ÓE NIK 80 www.tankonyvtar.hu

(81)

A Direct3D 10 és 11 jellemzői

► A D3D 10 és 11 letisztultabb, jobban alkalmazkodik a kor igényeihez.

 Többszálúság jobb kihasználása

 Új, és továbbfejlesztett árnyaló technológia

 GPGPU-támogatás

► De

 Csak a Windows Vista és az utáni operációs rendszerek támogatják.

 Nincs még olyan játékkonzol, ami támogatja → a fejlesztő cégek nem állnak át → lassan terjed

A félév során a Direct3D 9 API-val ismerkedünk meg!

(82)

Direct3D vs. OpenGL

Direct3D OpenGL

Platform Windows, XBox stb.* Platformfüggetlen Az API felépítése Objektumorientált Procedurális

Szolgáltatások

komplexitása Komplex, magasabb szintű

funkciók Egyszerű, alacsonyabb szintű műveletek

Gyártóspecifikus

bővítmények Nem elérhetők, az API

rögzített Elérhetők, ún. extension elemeken keresztül

Mobil változatok Direct3D Mobile OpenGL ES Koordináta-

rendszer Bal- illetve jobbsodrású Jobbsodrású Használhatóság Kezdetben nehezebb,

később könnyebb Kezdetben könnyebb, később nehezebb

* A Wine Windows emulátor segítségével Linuxon is képes működni.

© Nagy Attila és társai, ÓE NIK 82 www.tankonyvtar.hu

(83)

Megvalósítás

Alkalmazás

(CAD, játék, bemutató...)

3D programozói felület (API) (OpenGL, Direct3D, Glide...)

3D gyorsítóhardver meghajtóprogramja

(ATi Catalyst, nVidia ForceWare...)

3D gyorsítóhardver

(ATi Radeon, nVidia GeForce...)

Új f un kciók be vezeté se M eg jelen ítés i f ela da tok áth elyez ődés e Telj esítmén y R uga lmasság

(84)

Tartalomjegyzék

► Grafikai szabványok

► Ismerkedés a Direct3D API-val

► Direct3D-alkalmazások szerkezete

► .NET wrapperek

© Nagy Attila és társai, ÓE NIK 84 www.tankonyvtar.hu

(85)

Ismerkedés a Direct3D API-val

(86)

Szerkezeti jellemzői

1. Közvetlen módú megjelenítés (immediate mode rendering)

2. Rajzolási állapotok alkalmazása (rendering states)

3. Képkocka pufferek használata (frame buffer, back buffer)

4. Mélységi és stencil pufferek használata (depth buffer, stencil buffer)

© Nagy Attila és társai, ÓE NIK 86 www.tankonyvtar.hu

(87)

Rajzolási módszer (1)

► A grafikus API-k kétféle rajzolási módszert alkalmazhatnak

 Megtartott módú rajzolás (retained-mode rendering)

 Közvetlen módú rajzolás

(immediate-mode rendering)

► Gyakran a két módszert vegyesen alkalmazzák.

► A D3D közvetlen módú rajzolást alkalmaz!

(88)

Rajzolási módszer (2)

► Megtartott mód (Retained-mode rendering)

 A grafikus API magas szintű objektumok (pl. síkidomok) paramétereit tárolja az egymást követő képkockák közt.

 A programozónak csak a magas szintű objektumok paramétereit kell beállítani (változáskor), a többi az API dolga.

 Deklaratív jellegű működés

 Ilyen működésű pl. WPF

© Nagy Attila és társai, ÓE NIK 88 www.tankonyvtar.hu

(89)

Rajzolási módszerek (3)

► Közvetlen módú

(Immediate-mode rendering)

 A grafikus API alacsony szintű primitívek rajzolását biztosítja, melyekről a programozónak kell gondoskodnia.

 Az egymást követő képkockák közt az API nem tárol adatokat a kirajzolt objektumokról, erről a programozó gondoskodik.

 Ilyen működésű pl.: GDI, D3D

(90)

Rajzolási állapotok (1)

► A rajzolás alapegységei a primitívek.

► Már egy db háromszög kirajzolásakor is rengeteg paraméter definiálható

(pl.: mátrixok, szín, átlátszóság, megvilágítás stb.).

► Több tucat rajzolási paraméter létezik.

► Körülményes és lassú lenne mindig minden paramétert megadni.

► Megoldás: a rajzolási állapotok bevetetése!

© Nagy Attila és társai, ÓE NIK 90 www.tankonyvtar.hu

(91)

Rajzolási állapotok (2)

► A rajzolási paraméterek állapotbeállító

metódusokkal adhatók meg (SetRenderState()).

► Míg nem módosítjuk a paramétert, ugyanabban az állapotban lesz (csak változáskor kell újra

megadni).

SetRenderState(COLOR, yellow);

SetRenderState(TRANSPARENCY, 50%);

SetRenderState(TEXTURE, „image.bmp");

SetRenderState(…, …);

DrawPrimitive(primitive1);

DrawPrimitive(primitive2);

DrawPrimitive(primitiveN);

DrawPrimitive(primitive1, yellow, 50%, "image.bmp", …);

DrawPrimitive(primitive2, yellow, 50%, "image.bmp", …);

DrawPrimitive(primitiveN, yellow, 50%, "image.bmp", …);

Rajzolási állapotokkal:

(92)

Frame (képkocka) puffer

► A frame puffer tartalma kerül a képernyőre.

► Ha a frame pufferbe közvetlenül kerül a

képszintézis eredménye, animáció esetén villogás tapasztalható! Oka:

 A képszintézis során a képkockát elemi lépések építik fel.

 Előfordulhat, hogy a képernyőre félkész állapot kerülhet.

► A képernyőre rajzolás, és a megjelenítés nem szinkronban történik.

© Nagy Attila és társai, ÓE NIK 92 www.tankonyvtar.hu

(93)

Amennyiben a megjelenítés közvetlenül a frame pufferbe történik, előfordulhat, hogy a képernyőre rajzolás még azelőtt bekövetkezik, hogy a frame

pufferben a teljes tartalom előállt volna → villogás (flickering) A képernyőn megjelenő

(félkész) képkocka A tényleges képkocka

(94)

Dupla pufferelés

► A villogásra megoldás a dupla pufferelés.

► A képernyőre rajzolás továbbra is a frame pufferből történik.

► Megjelenítés egy ún. hátsó pufferbe ( back buffer ).

► Amint a képszintézis eredménye a hátsó pufferben előállt, a frame puffer és a hátsó puffer szerepet cserélnek.

© Nagy Attila és társai, ÓE NIK 94 www.tankonyvtar.hu

(95)

Dupla pufferelés esetén előfordulhat, hogy a pufferek cseréjekor a pixeleket pásztázó mechanizmus még a képernyő közepénél jár → képszakadás

(visual tearing)

A megjelenő képkocka A tényleges képkocka

(96)

Vertikális szinkronizáció (V-Sync)

► A képszakadás kiküszöbölhető a pufferek

megfelelő időpillanatban történő cserélésekor.

 A pixel pásztázó mechanizmus a képernyő bal felső sarkától a jobb alsó sarkáig megy soronként.

 A puffereket akkor kell felcserélni, mikor a pásztázó a jobb alsó sarokból a bal felsőbe tér vissza (vertikális visszatérés).

 Amíg a visszatérés nem következik be, a D3D blokkolja a további megjelenítést. (Az animáció sebessége a

képfrissítési frekvenciától függ ekkor!)

© Nagy Attila és társai, ÓE NIK 96 www.tankonyvtar.hu

(97)

Tripla pufferelés

► Hasonló a dupla puffereléshez, de itt a frame pufferen kívül két hátsó puffer van.

► V-Sync esetén nincs blokkolás, mivel a két hátsó puffer közt szabadon lehet váltogatni.

► Megmarad a V-Sync kedvező hatása, és elérhető a

képfrissítési frekvenciától független animáció.

(98)

Mélységi és stencil pufferek

► Mélységi puffer (z-buffer, w-buffer)

 A láthatósági feladat megoldásához a D3D z-puffert vagy w-puffert képes alkalmazni.

► Stencil puffer (stencil buffer)

 Segítségével az egyes pixelek engedélyezhetők és letilthatók.

 Egy letiltott pixelre való rajzolás nem módosítja a pixel eredeti értékét.

 Így megoldható, hogy csak bizonyos pixelekre

rajzoljunk, más pixelek tartsák meg korábbi színüket.

© Nagy Attila és társai, ÓE NIK 98 www.tankonyvtar.hu

(99)

Tartalomjegyzék

► Grafikai szabványok

► A Direct3D alapjai

► Direct3D-alkalmazások szerkezete

► .NET wrapperek

(100)

Direct3D-alkalmazások szerkezete

© Nagy Attila és társai, ÓE NIK 100 www.tankonyvtar.hu

(101)

D3D-alkalmazások főbb részei

1. A D3D inicializálása

2. A D3D eszközkapcsolat felépítése

3. Grafikus erőforrások betöltése

4. Megjelenítés, animáció, a program működése…

5. Grafikus erőforrások felszabadítása

6. A D3D eszközkapcsolat megszüntetése

7. A D3D objektum felszabadítása

(102)

Tartalomjegyzék

► Grafikai szabványok

► A Direct3D alapjai

► Direct3D-alkalmazások szerkezete

► .NET wrapperek

© Nagy Attila és társai, ÓE NIK 102 www.tankonyvtar.hu

(103)

.NET wrapperek

(104)

► A Direct3D natív C++ függvénykönyvtár

► Egy burkoló modul ( wrapper ) szükséges, hogy C#-ból elérhető legyen.

► Főbb wrapper-ek C#-hoz

 Microsoft XNA Framework

 Microsoft Managed DirectX

 SlimDX

© Nagy Attila és társai, ÓE NIK 104 www.tankonyvtar.hu

(105)

Microsoft XNA Framework

► Hivatalos teljesen .NET alapú keretrendszer a DirectX 9 szolgáltatásainak elérésére.

► Bizonyos mértékben leegyszerűsíti a Direct3D által kínált lehetőségeket, de gyakorlatilag minden

elérhető ezen a wrapperen keresztül.

► Támogatja az Xbox 360, a Zune és a Windows Phone 7 platformokat is!

► Kimondottan játékfejlesztésre optimalizálták,

eléggé elterjedt.

(106)

Microsoft Managed DirectX

► Korábbi hivatalos .NET alapú wrapper a DirectX- hez.

► Ma már nem támogatott, kevesen használják, és az újabb DirectX API-kat nem támogatja.

► Felülete hasonló volt az eredeti natív DirectX felületéhez.

► Régóta nem fejlesztik, hivatalosan az XNA Framework váltotta le.

© Nagy Attila és társai, ÓE NIK 106 www.tankonyvtar.hu

(107)

SlimDX

► Nem hivatalos, open source wrapper a DirectX szolgáltatásaihoz.

► Támogatja a DirectX 9, 10 és 11 verzióit is.

► Struktúrája közelebb áll a natív DirectX-hez, mint az XNA keretrendszeré.

► Általános célú feladatra jobb, mint az XNA.

A félév során ezt fogjuk felhasználni!

(108)

Feladat

Direct3D inicializálása egy C#

alkalmazásban

© Nagy Attila és társai, ÓE NIK 108 www.tankonyvtar.hu

(109)

Irodalomjegyzék

[1] Szirmay-Kalos L., Antal Gy., Csonka F.: Háromdimenziós grafika, animáció és játékfejlesztés, Computerbooks, 2003

[2] Nyisztor K.: Grafika és játékprogramozás DirectX-szel, SZAK Kiadó, 2005 [3] MSDN.com, Microsoft DirectX 9.0 Documentation,

http://msdn.microsoft.com/en-us/library/ee416796(v=VS.85).aspx

(110)

Bevezetés a Direct3D használatába

Geometria definiálása Rajzolási állapotok Rajzolási utasítások

© Nagy Attila és társai, ÓE NIK 110 www.tankonyvtar.hu

(111)

Tartalomjegyzék

► Geometria definiálása

► Rajzolási állapotok

► Rajzolási utasítások

(112)

Tartalomjegyzék

► Geometria definiálása

► Rajzolási állapotok

► Rajzolási utasítások

© Nagy Attila és társai, ÓE NIK 112 www.tankonyvtar.hu

(113)

Geometria definiálása

(114)

Geometria definiálása (1)

► A megjelenítendő 3D-modell geometriáját (poligonhálóját) le kell írnunk, hogy

kirajzolhassuk.

► A poligonháló építőelemei:

 a primitívek (pont, vonal, háromszög)

 A primitíveket csúcspontokkal (vertex) definiáljuk.

 A csúcspontok közti kapcsolatot, a poligonhálót alkotó primitívek típusa határozza meg.

© Nagy Attila és társai, ÓE NIK 114 www.tankonyvtar.hu

(115)

Geometria definiálása (2) – Primitív típusok

Pontlista (point list)

A definiált csúcspontokat különálló pontokként kezeli a D3D. Megjelenítéskor ezek alapesetben 1 pixelnyi kiterjedésűek, de ez módosítható.

Vonallista (line list)

Az egymás után definiált csúcspontokat páron- ként összeköti. Különálló vonalszegmensek definiálására használható.

Vonalszalag (line strip)

Minden csúcspontot összeköt az előzővel.

Folyamatos vonal definiálására használható.

(116)

Geometria definiálása (3) – Primitív típusok

Háromszöglista (triangle list)

Minden egymást követő csúcspont hármast különállóan összeköt, és a csúcspontok közti részt kitölti (az árnyalásnak megfelelően).

Háromszögszalag (triangle strip)

Az első három csúcspont összeköti, majd minden további csúcspontot összeköt az előző kettővel, így alkotva kitöltött háromszögeket

Háromszöglegyező (triangle fan)

Az első három csúcspont összeköti, majd minden további csúcspontot összeköt az előzővel, és a legelsővel, így alkotva kitöltött háromszögeket.

© Nagy Attila és társai, ÓE NIK 116 www.tankonyvtar.hu

(117)

Geometria definiálása (4) – Csúcspont típusok

► A primitív típusok önmagukban csak a csúcspontok közti kapcsolatokat, éleket határozzák meg.

► A konkrét adatok a csúcspontokban tárolódnak

 3D pozíció

 Szín

 Normálvektor

 Textúra koordináta

 Stb.

► A csúcspont típusa meghatározza, hogy pontosan milyen adatokat ír le (ez szükséges a D3D

részére).

(118)

Geometria definiálása (5) – Csúcspont típusok

► A csúcspontok típusa a flexibilis

csúcspontformátum (FVF: flexible vertex format ) segítségével definiálható.

 Az FVF bitmaszkkal írja le, hogy milyen adatok tárolódnak a csúcspontokban.

 Meghatározza, hogy a csúcspont adatok hogyan ábrázolódnak.

© Nagy Attila és társai, ÓE NIK 118 www.tankonyvtar.hu

(119)

Geometria definiálása (6) – Csúcspont típusok

► Az alábbi felsorolástípussal adható meg az aktuálisan használt csúcspontok formátuma.

[Flags]

public enum VertexFormat {

Position = 2, Normal = 16, PointSize = 32, Diffuse = 64, Specular = 128, Texture1 = 256, Texture1 = 256,

}

Device d3dDevice = …;

VertexFormat fvf = VertexFormat.Position|VertexFormat.Diffuse|VertexFormat.Normal;

d3dDevice.VertexFormat = fvf;

(120)

Példa – kocka drótváz definiálása

► Hogyan definiálható a drótváz geometriája?

• Definiálni kell a vonalszakaszok csúcspontjait.

• Érdemes vonallistát használni primitív típusként.

• A definiált csúcspontokat tömbben kell eltárolni

(a vonalszakaszok a tömb 1.-2., 3.-4., 5.-6., … csúcspontjai közé kerülnek).

(0, 1, 0)

(0, 1, 1) (1, 1, 1)

(1, 0, 1) (1, 0, 0)

(0, 0, 0)

(0, 0, 1)

y

z x

(1, 0, 0)

© Nagy Attila és társai, ÓE NIK 120 www.tankonyvtar.hu

(121)

Példa – kocka drótváz definiálása

► Definiáljuk a csúcspont adatokat tároló struktúrát.

Ez a struktúra a csúcspontokra csak a 3D pozíciójukat és a színüket tárolja.

Az FVF konstans a vertex formátum kódot írja le a D3D részére.

(122)

Példa – kocka drótváz definiálása

► A csúcspontok tömbjének definiálása

• Minden élre 2 csúcspontot kell definiálni (24 csúcspont lesz összesen).

• Összesen 12 él létezik.

(0, 1, 0)

(0, 1, 1) (1, 1, 1)

(1, 0, 1) (1, 0, 0)

(0, 0, 0)

(0, 0, 1)

y

z x Csúcspontok (élek):

(0,0,0) → (0,0,1) (0,0,1) → (1,0,1) (1,0,1) → (1,0,0) (1,0,0) → (0,0,0) (0,1,0) → (0,1,1) (0,1,1) → (1,1,1) (1,1,1) → (1,1,0) (1,1,0) → (0,1,0) (0,0,0) → (0,1,0) (0,0,1) → (0,1,1) (1,0,1) → (1,1,1) (1,0,0) → (1,1,0)

(1, 1, 0)

© Nagy Attila és társai, ÓE NIK 122 www.tankonyvtar.hu

(123)

Példa – kocka drótváz definiálása

► A csúcspontok tömbjének definiálása (C#)

(124)

Példa – kocka drótváz definiálása

► Észrevételek

 Egyszerű alakzatok definiálásakor is rengeteg csúcs szükséges.

 Bővebb vertexformátum használatakor nagy memória- és sávszélességigény!

 A primitívek definiálása nagyon redundáns!

(Ugyanaz a csúcspont sokszor szerepelhet.)

© Nagy Attila és társai, ÓE NIK 124 www.tankonyvtar.hu

(125)

Geometria definiálása (7)

► A nagy sávszélességigény csökkentésére két főbb technika létezik

 Az indexelt geometria alkalmazása

 A csúcspont és index puffer objektumok

(vertex buffer, index buffer)

(126)

Indexelt geometria (1)

► Egy kockának 8 csúcsa van, mégis 24

csúcsot kellett definiálni az előző példában.

(0, 1, 0)

(0, 1, 1) (1, 1, 1)

(1, 0, 1) (1, 0, 0)

(0, 0, 0)

(0, 0, 1)

y

z x Csúcspontok (élek):

(0,0,0) → (0,0,1) (0,0,1) → (1,0,1) (1,0,1) → (1,0,0) (1,0,0) → (0,0,0) (0,1,0) → (0,1,1) (0,1,1) → (1,1,1) (1,1,1) → (1,1,0) (1,1,0) → (0,1,0) (0,0,0) → (0,1,0) (0,0,1) → (0,1,1) (1,0,1) → (1,1,1) (1,0,0) → (1,1,0)

(1, 1, 0)

© Nagy Attila és társai, ÓE NIK 126 www.tankonyvtar.hu

(127)

Indexelt geometria (2)

► Minden csúcs háromszor lett felvéve, mert 3 élben szerepelt! (redundancia)

► Megoldás

 Szükségtelen a csúcsokat annyiszor definiálni, ahány primitívben részt vesznek.

 Újradefiniálás helyett elég hivatkozásokat (indexeket) eltárolni a definiált csúcsokra!

 Ekkor a geometria leírása egy csúcspont és egy

csúcspont indextömb segítségével történik.

(128)

Indexelt geometria (3)

► Az indexelt csúcstömb definiálása

 8 db csúcsot kell definiálni

 24 db indexre van szükség

E=(0, 1, 0)

F=(0, 1, 1) G=(1, 1, 1)

C=(1, 0, 1)

D= (1, 0, 0) A=(0, 0, 0)

B=(0, 0, 1)

y

z x Csúcsok:

(0,0,0) (0,0,1) (1,0,1) (1,0,0) (0,1,0) (0,1,1) (1,1,1) (1,1,0)

H=(1, 1, 0)

Csúcs indexek (élek):

A→B B→C C→D D→A E→F F→G G→H H→E A→E B→F C→G D→H

© Nagy Attila és társai, ÓE NIK 128 www.tankonyvtar.hu

(129)

Indexelt geometria (4)

► Indexelt csúcsponttömb definiálása (C#)

(130)

Indexelt geometria (5)

Kocka drótváz Indexelt kocka drótváz Csúcsok

száma 24 8

Indexek

száma 0 24

Memóriaigény 24 * sizeof(VertexPosition) =

384 byte 8 * sizeof(VertexPosition) + 24

* sizeof(ushort) = 176 byte

sizeof(VertexPosition) = 16 byte sizeof(ushort) = 2 byte

Ebben a példában az indexelt geometria alkalmazása kb. felére csökkentette a

szükséges memóriaigényt (és sávszélesség- igényt).

© Nagy Attila és társai, ÓE NIK 130 www.tankonyvtar.hu

(131)

Csúcspont és index pufferek

► A geometriát leíró csúcspont- és

indextömbök a GPU memóriájában is tárolhatók.

► A csúcspont és index pufferek segítségével a GPU memóriájába helyezhetők az adatok.

► A sávszélesség okozta szűk keresztmetszet

teljesen áthidalható ezekkel; a megjelenítés

többszörösére gyorsítható használatukkal.

(132)

Tartalomjegyzék

► Geometria definiálása

► Rajzolási állapotok

► Rajzolási utasítások

© Nagy Attila és társai, ÓE NIK 132 www.tankonyvtar.hu

(133)

Rajzolási állapotok

(134)

Rajzolási állapotok (1)

► A geometria definiálása, és a szükséges erőforrások betöltése után még a kívánt rajzolási állapotokat is be kell állítani.

► A rajzolási állapotok megadása után történhet csak a tényleges rajzolás.

© Nagy Attila és társai, ÓE NIK 134 www.tankonyvtar.hu

(135)

Rajzolási állapotok (2)

► A rajzolási állapotok célja

 Az aktuálisan rajzolt primitívek rajzolási paramétereinek meghatározása.

 Nem kell minden primitív rajzolásakor az összes lehetséges rajzolási paramétert megadni

(állapotfüggő rajzolás).

Rajzolási állapotok beállítása forráskódból, pl.:

Device d3dDevice = …;

d3dDevice.SetRenderState(RenderState.ZEnable, true);

d3dDevice.SetRenderState(RenderState.FogColor, new Color3(0.0f, 0.5f, 1.0f));

d3dDevice.SetTransform(0, Matrix.Translation(0, 1, 2));

d3dDevice.SetTexture(0, textureObject);

(136)

Rajzolási állapotok (3)

► A főbb rajzolási állapotok:

 Alfa keverés (alpha blending)

 Alfa tesztelés (alpha testing)

 Ambiens világítás (ambient lighting)

 Élsimítás (antialiasing)

 Hátsólap eldobás (culling)

 Mélységi pufferelés (depth buffer state)

 Köd (fog)

 Megvilágítás (lighting)

 Poligonkitöltés (outline and fill)

 Csúcspontszínezés (per-vertex color)

 Primitívvágás (primitive clipping)

 Árnyalás (shading)

 Stencil puffer (stencil buffer)

 Textúra kifeszítés (texture wrapping)

 Textúra mintavételezés (texture sampling states)

© Nagy Attila és társai, ÓE NIK 136 www.tankonyvtar.hu

(137)

Rajzolási állapotok (4)

► A rajzolási állapotok állítása időigényes

művelet (a konkrét sebesség állapotfüggő).

► A költséges állapot átállításokat kerülni, minimalizálni szokták.

 A hasonló állapotot igénylő primitíveket egymás után, csoportosan rajzolják ki.

 Ha gyors rajzolási sebesség elérése a cél, nem

mindegy, mit milyen sorrendben rajzolunk ki!!

(138)

Tartalomjegyzék

► Geometria definiálása

► Rajzolási állapotok

► Rajzolási utasítások

© Nagy Attila és társai, ÓE NIK 138 www.tankonyvtar.hu

(139)

Rajzolási utasítások

(140)

Rajzolási utasítások (1)

► A geometria definiálása, és az állapotok

beállítása után a primitívek megjeleníthetők.

► A rajzolásra a D3D több metódust is biztosít.

 DrawUserPrimitives

 DrawIndexedUserPrimitives

 DrawPrimitives

 DrawIndexedPrimitives

© Nagy Attila és társai, ÓE NIK 140 www.tankonyvtar.hu

(141)

Rajzolási utasítások (2)

► DrawUserPrimitives

 Megadható a primitív típusa

 A csúcspontokat tároló tömb

 Az első rajzolandó csúcspont indexe és a kirajzolandó primitívek száma

Primitívek rajzolása adott csúcspont tömbből, pl.:

(142)

Rajzolási utasítások (3)

► DrawIndexedUserPrimitives

 Indexelt geometria megjelenítését teszi lehetővé.

 Külön megadható a csúcspont puffer, az index puffer illetve további kapcsolódó paraméterek.

© Nagy Attila és társai, ÓE NIK 142 www.tankonyvtar.hu

Hivatkozások

KAPCSOLÓDÓ DOKUMENTUMOK

Az INIOCHOS Intelligens C4I kapcsolat hálózati hadvise- léshez, a hálózatos digitális harcászati térkép valós idejű nyomkövetést tett lehetővé. A  tűzvédelmi

Három nagy áteresztőképességű metodikával (microarray, kvantitatív, valós idejű PCR - qRT-PCR - alapú TaqMan alacsony denzitású array: TLDA és kis RNS szekvenálás)

eredmények azt mutatják, hogy a többváltozós módszer olyan valós idejű becslése- ket képes adni, amelyek sokkal pontosabbak az egyváltozós szűrőknél (mint például

- két aktív centrum, három eltérő aktivitás (Rnáz-H, RNS-függő DNS polimeráz, DNS- függő DNS polimeráz). •

keresztül (PC, beágyazott rendszerek, valós idejű rendszerek, FPGA, mikrovezérlők)... Numerikus típus

A dokumentum tartalmáért teljes mértékben Szegedi Tudományegyetem vállalja a felelősséget, és az semmilyen körülmények közöt.. nem tekinthető az Európai Unió és / vagy

A dokumentum tartalmáért teljes mértékben Szegedi Tudományegyetem vállalja a felelősséget, és az semmilyen körülmények közöt.. nem tekinthető az Európai Unió és / vagy

burnetii (Loftis és mtsai., 2006) vagy a Chlamydiales (Lienard és mtsai., 2011) specifikus valós idejű PCR vizsgálatok során pozitívnak bizonyult.. A mintákat formalinban