Dr. Szirmay-Kalos László, Antal
György,Csonka Ferenc:
a könyvhöz CD melléklet tartozik
|
A könyv előszava | A könyv tartalomjegyzéke | CD melléklet |
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.
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.
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 modellezés
A képszintézis
Mi a fény és hogyan érzékeljük?
A képszintézis lépései
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
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ó
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
Hierarchikus adatszerkezet
A geometriai primitívek
Világmodellek fájlokban
Világmodellek felépítése a memóriában
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
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
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
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
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
Program: HelloDirectX alkalmazás
Program: VRML színtér megjelenítése
OpenGL kontra DirectX
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
Duke
Quake
3DS formátum olvasása és írása
Metropolis fénykövetés
Árnyéktérképek textúrahardverrel
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
Vissza a lap tetejére |