Háromdimenziós grafika

 

 

Telefon: 375-1564, 375-3591
Web: www.computerbooks.hu

Telefon: 250-0165
Web: www.leonardo.sns.hu


Dr. Szirmay-Kalos László, Antal György,Csonka Ferenc:
Háromdimenziós grafika,
animáció és játékfejlesztés

a könyvhöz CD melléklet tartozik
Megjelenés: 2003
510 oldal (ebből 8 színes), 5496.- Ft
ISBN: 963 618 303 1


 
A könyv előszava A könyv tartalomjegyzéke CD melléklet 

A könyv előszava

A szemünk az egyik legfontosabb érzékszervünk. Hétköznapi tevékenységeink során túlnyomórészt a szemünkkel követjük környezetünk változásait, és ennek megfelelően döntünk saját cselekedeteinkről. A képek, a film és a televízió ezt a folyamatot kiterjesztették mind térben, mind pedig időben, hiszen segítségükkel olyan dolgokat is érzékelhetünk, amelyek tőlünk távol, vagy a valóságban sokkal korábban zajlottak le. A számítógépes grafika még tovább megy ezen az úton, és olyan világokba enged bepillantani, amelyek a valóságban sohasem léteztek. A nem létező, virtuális világokat a matematika nyelvén, számokkal adhatjuk meg. Számítógépünk a számokkal leírt virtuális világmodellt fényképezi le, azaz kiszámítja az ugyancsak számokat tartalmazó képet. A modellben szereplő számokat a kép számaira nagyon sokféleképpen alakíthatjuk át, amely végtelen sokféle lehetőséget ad grafikus rendszerek kialakítására. Ezek közül azokban mozgunk otthonosan, amelyek a mindennapjaink megszokott képeihez hasonlatosakkal kápráztatnak el bennünket, ezért célszerű a grafikus rendszert a természettől ellesett elvek szerint, azok analógiájára megalkotni. Amennyiben modellünk háromdimenziós térben elhelyezkedő tárgyakat tartalmaz, a fényképezés pedig a fénytan (optika) alapján működik, akkor háromdimenziós grafikáról beszélünk. Az optikai analógia nem feltétlenül jelenti azt, hogy az optika törvényszerűségeit
pontosan be is akarjuk tartani, csupán a számunkra legfontosabbakat tartjuk tiszteletben, a többit pedig szükség szerint egyszerűsítjük. A kiszámított kép leggyakrabban a számítógép monitoráról jut a felhasználó szemébe. Különleges alkalmazásokban azonban a képet a felhasználót körülvevő szoba falára, vagy akár a szemüvegének a felületére vetíthetjük úgy, hogy a felhasználó mozgásának megfelelően a képet mindig az új virtuális nézőpontnak megfelelően frissítjük. A szemüveges megoldásban a felhasználó a két szemével kissé eltérő képeket érzékelhet, így tényleges háromdimenziós élményhez juthat. A valós életben már megszoktuk, hogy a környezetünk nem állandó, hanem szereplői mozognak, tulajdonságaik időben változnak. A virtuális világunk mozgatását animációnak nevezzük. A felhasználó a virtuális világ passzív szemlélőjéből annak részesévé válhat, ha megengedjük, hogy a térben mozogjon, és a tér objektumait átrendezze (interakció). Az ilyen virtuális valóság rendszerek megpróbálják a felhasználóval minél jobban elhitetni, hogy valós környezet veszi körül. Innen már csak egyetlen lépésre vagyunk a számítógépes játékoktól, amelyekben a virtuális világ objektumai is figyelemmel kísérik a felhasználó mozgását, és ennek megfelelően alakítják saját viselkedésüket, azaz túlélési stratégiájukat. Ez a könyv a háromdimenziós számítógépes grafikával, animációval, virtuális valósággal és a számítógépes játékokkal foglalkozik, ismerteti azokat az elméleti alapokat és algoritmusokat, amelyekkel magunk is grafikus, illetve animációs rendszereket hozhatunk létre.

Kinek készült ez a könyv?

Szándékaink szerint minden informatikusnak és leendő informatikusnak, aki maga is szeretne grafikus rendszereket fejleszteni, illetve grafikusoknak és animátoroknak, akik eszközeik lelkébe kívánnak látni. A számítógépes grafika egyszerre tudomány, mérnöki-informatikai szakma és művészet. Nem vettük a bátorságot ahhoz, hogy a grafika művészeti oldalához hozzászóljunk, így a könyv csak a tudományos és technikai elemeket tekinti át. Igyekeztük az elméleti alapokat úgy összefoglalni, hogy a témakörök nagy részének megértéséhez a középiskolai matematika és fizika is elegendő legyen. Kivételek persze vannak, ilyen például a globális illuminációról szóló fejezet, illetve az animáció egyes részei, de reméljük, hogy ezek a részek sem veszik el az Olvasó kedvét a könyvtől. Azt ajánljuk, hogy ha a kedves Olvasónak egy-egy rész első olvasásra nehéznek tűnik, akkor nyugodtan ugorja át, és inkább a példaprogramokat próbálja megérteni. Az elmélethez ráér később is visszatérni. A könyv szinte minden fontosabb témakörét programokkal demonstráljuk, amelyeket az Olvasó a saját programjaiba is átvehet. A könyvben részleteiben, a CD-n pedig teljességükben megjelenő programok bemutatják az algoritmusok implementálási fortélyait. Másrészt, talán azt is sikerül velük megmutatni, hogy a számítógépes grafika egyáltalán nem olyan nehéz, mint amilyennek talán első pillantásra látszik, hiszen rövidke programokkal valóban csodálatos eredményeket érhetünk el. A programok készítése során az áttekinthetőségre és az egyszerűségre törekedtünk, nem bonyolítottuk a kódot optimalizálással, hibakezeléssel, sőt helyenként még a memória felszabadításával sem. Így a megoldások biztosan nem optimálisak, és nem is robusztusak, de hitünk szerint könnyen követhetőek. A programokat C++ nyelven adjuk közre, és általában az OpenGL, a GLU és a GLUT könyvtárakat használjuk fel. Röviden kitérünk még a Windows eseményvezérelt programozási felületének, és a DirectX könyvtárnak az ismertetésére is. Ezek közül csak a C++ nyelv és az alapvető objektum-orientált programozási elvek ismeretét tételezzük fel, a többi könyvtár használatába lépésről-lépésre vezetjük be az Olvasót.

Miért érdemes elolvasni ezt a könyvet?

Szándékaink szerint az Olvasó, miután végigrágta magát ezen a könyvön, érteni fogja, hogy hogyan készülnek a háromdimenziós grafikák, az animációk és a játékok, ismerni fogja azokat az elveket és szoftver eszközöket, amelyeket ilyen rendszerek készítéséhez felhasználhat. A témakör fontosságát talán csak néhány közismert ténnyel támasztanánk alá. A mai harminc alatti korosztály elsődleges szórakozási formája a számítógépes játék. Az emberek nem azért vesznek két-három évenként új számítógépeket, hogy még gyorsabban tudjanak levelezni, szöveget szerkeszteni, interneten böngészni stb., hanem azért, hogy a legújabb, egyre valószerűbb grafikus játékok is élvezhetőek legyenek. Alig készül olyan mozifilm, amelyben legalább egyes jeleneteket nem számítógépes grafikával hoztak volna létre. Mindamellett a gyártók az új processzorok architektúrájának kialakításánál alapvető szempontnak tartják, hogy a grafikus algoritmusok nagyon gyorsan fussanak rajtuk, és ezért ezeket a műveleteket külön utasításkészlettel valósítják meg (Intel/SSE2, AMD/3Dnow!+). Ráadásul ezek a tények elhanyagolhatók ahhoz képest, hogy ha az Olvasónak gusztusa támad rá, maga is készíthet grafikus, illetve animációs programokat, amelyek a semmiből új világot teremtenek, sőt akár háromdimenziós játékokat is, amelyekben fantasztikus világokban legyőzhetetlennek tűnő ellenfelek ellen küzdhet, és következmények nélkül veszíthet vagy győzhet. Közülünk valószínűleg kevesen fogják megízlelni az űrutazás élményét, kevesen fognak vadászrepülőt vezetni, és a köztünk megbújó leendő kommandósok, páncélos lovagok és dzsungelharcosok száma is csekély. A számítógépes játékok segítségével azonban egy kis időre bárkiből bármi lehet. Talán még nagyobb bizonyossággal mondhatjuk, hogy senki sem fog a fénysebesség közelében repülni. A számítógépes grafika számára ez sem lehetetlen, csupán a programunkba a relativitáselmélet néhány alapképletét kell beépíteni. Foglaljuk el a helyünket a számítógépünk előtt! Dőljünk kényelmesen hátra és engedjük el a fantáziánkat, a többi már jön magától. Kellemes olvasást, programozást, izgalmas játékot és virtuális öldöklést mindenkinek!


A könyv tartalomjegyzéke

Előszó

Bevezetés

A modellezés
A képszintézis
Mi a fény és hogyan érzékeljük?
A képszintézis lépései

Grafikus hardver és szoftver

A grafikus hardverek felépítése
A grafikus szoftverek felépítése
Programvezérelt és eseményvezérelt interakció
Programozás Windows környezetben
A grafikus hardver illesztése és programozása

Geometriai modellezés

Pontok, vektorok és koordinátarendszerek
Geometriai transzformációk
Görbék
Felületek
Testek
Térfogati modellek
Modellek poligonhálóvá alakítása: tesszelláció

Színek és anyagok

A színérzet kialakulása
A színillesztés
A színek definiálása
Színleképzés a háromdimenziós grafikában
A hétköznapi életben előforduló anyagok
Anyagok a háromdimenziós grafikában
Spektrális képszintézis
Anyagmodellek
Textúrák

Virtuális világ

Hierarchikus adatszerkezet
A geometriai primitívek
Világmodellek fájlokban
Világmodellek felépítése a memóriában

Sugárkövetés

Az illuminációs modell egyszerűsítése
A tükör- és törési irányok kiszámítása
Metszéspontszámítás felületekre
A metszéspontszámítás gyorsítási lehetőségei
Program: rekurzív sugárkövetés

Inkrementális képszintézis

Nézeti csővezeték
Nézeti transzformáció
A perspektív transzformáció
Vágás
Képernyő transzformáció
A takarási feladat megoldása
Árnyalás
Program: Egyszerű színtér megjelenítése
Stencil buffer
Átlátszóság
Textúra leképzés
Textúra leképzés az OpenGL-ben
A textúrák szűrése
Multitextúrázás
Fénytérképek
Bucka leképzés
Környezet leképzés
Árnyékszámítás
A 3D grafikus hardver

Globális illumináció

Pont és irányhalmazok
A fény-felület kölcsönhatás: az árnyalási egyenlet
Térfogati fényjelenségek
A képszintézis feladat elemei
Az árnyalási egyenlet megoldása
Monte-Carlo integrálás
Az árnyalási egyenlet megoldása véletlen gyűjtősétákkal
Az árnyalási egyenlet megoldása véletlen lövősétákkal
Fontosság szerinti mintavételezés a véletlen bolyongásnál
Véletlen bolyongási algoritmusok
A globális illuminációs feladat iterációs megoldása

Animáció

Folyamatos mozgatás különböző platformokon
Dupla bufferelés
Valószerű mozgás feltételei
Pozíció-orientáció mátrixok interpolációja
Az orientáció jellemzése kvaternióval
A mozgásgörbék megadási lehetőségei
Képlet animáció
Kulcskeret animáció
Pálya animáció
Fizikai animáció
A hierarchikus mozgás
Deformációk
Karakteranimáció
Mozgáskövető animáció
Valós és virtuális világok keverése

Számítógépes játékok

A felhasználói beavatkozások kezelése
A játékmotor
Az űrharc játék
Hierarchikus szereplők
Mozgó karakterek
Terepek
A hegyivadász játék
A teljesítmény növelése

DirectX

Program: HelloDirectX alkalmazás
Program: VRML színtér megjelenítése
OpenGL kontra DirectX

Irodalomjegyzék

Tárgymutató

CD melléklet

Mintaprogramok

Hello Windows, GLUT, OpenGL, DirectX
NURBS rajzoló
OBJ fájl megjelenítő és szárnyas él adatstruktúra
Rekurzív sugárkövetés
Inkrementális képszintézis
Környezet leképzés
Fénytérkép
Síkra vetített árnyékok stencil bufferrel
VRML megjelenítő
Képlet és kulcskeret animáció
Dinamikai szimuláció
Primitív ember animációja
Űrharc játék
A hegyivadász játék

Egyéb programok

Duke
Quake
3DS formátum olvasása és írása
Metropolis fénykövetés
Árnyéktérképek textúrahardverrel

Galéria

Könyvtár

OpenGL specifikáció
VRML specifikáció
Art of Maya
Monte-Carlo Global Illumination Methods
Ph.D. tézisek
Vertex Shader Introduction
CG specifikáció
Shadow volumes

Modellek

Szoftverek


Vissza a lap tetejére