A könyv előszava
Életünk folytonos szemlélődéssel telik, figyeljük környezetünket
és feldolgozzuk a minket ért hatásokat. A hatások gondolatokat és érzelmeket
keltenek bennünk, amelyeket szeretnénk kifejezni, maradandóvá tenni és
másokkal megosztani. A képek formájában befogadott és továbbadott információk
mindig is fontosak voltak az emberek számára. Képek, rajzok segítségével
a bonyolult gondolatokat is egyszerűen és közérthetően kifejezhetjük, az
ilyen formában kapott információkat gyorsan befogadjuk, megértjük és könnyen
megjegyezzük. A kis gyermekektől kezdve, a festőkön át, a tervező mérnökökig
mindenki szívesen ``rajzolgat'', hogy elképzeléseit mások számára is elérhetővé
tegye. A számítógép ebben a folyamatban hatékony társ lehet, mert képes
arra, hogy a fejünkben körvonalazódó vázlatokat átvegye és azokból meggyőző
képeket készítsen. A számítógép munkája során alkalmazhatja a fizika törvényeit,
Dali vagy Picasso stílusát, az építészek vagy a gépészek által követett
rajzolási szabályokat, vagy akár teljesen újszerű látásmódot is követhet.
Így a kapott eredmény lehet olyan, mintha csak fényképezőgéppel vagy ecsettel
készítettük volna, olyan, mintha egy tervezőiroda műszaki rajzolóinak a
szorgalmát és ügyességét dicsérné, de bepillantást engedhet olyan világokba
is, amelyekből még sohasem értek minket képi hatások, ezért többségünk
számára mindig is felfoghatatlanok voltak.
A számítógépes grafika célja az, hogy a számítógépből olyan eszközt
varázsoljon, amely vázlatos gondolatainkról képeket alkot. Egy ilyen eszköz
sokrétű ismereteket foglal magában. A gondolatainkban szereplő alakzatok
megadásához a geometriához kell értenünk, a fény hatásának modellezéséhez
az optika törvényeit alkalmazzuk. A számítógép monitorán megjelenő képet
az emberi szem érzékeli és az agy dolgozza fel, ezért a számítási folyamatoknak
figyelembe kell venniük az emberi szem és agy lehetőségeit és korlátait
is. Mivel a ``fényképezést'' számítógépes programmal kell megoldani, a
szoftvertechnológia, algoritmusok és adatszerkezetek ismeretétől sem tekinthetünk
el. Ráadásul a képek megjelenítéséhez és előállításához a szűkre szabott
idő miatt hardver támogatás is szükséges, ezért a legjobb, ha már most
elkezdjük felfrissíteni a hardver ismereteinket.
A számítógépes grafika nehéz, mert nagyon sokféle tudást kell megszereznünk
ahhoz, hogy igazán sajátunknak érezzük. Ugyanakkor a számítógépes grafika
nagyon szép is, mert kincseket lelhet benne az integrál egyenletekkel foglalkozó
matematikus, az optikában vagy a Maxwell egyenletekben elmélyedő fizikus,
a látás rejtelmeit kutató orvos, az adatstruktúrákkal és az algoritmusokkal
bűvészkedő programozó, és az egészet alkalmazó képzőművész vagy tervezőmérnök.
Az interaktív grafikus programok, képek, filmek, számítógépes játékok formájában
megjelenő eredmény pedig mindannyiunk gyönyörűségére szolgál. Ezen könyv
elsősorban szoftvertervezők és programozók számára készült, szerkezete
a Budapesti Műszaki Egyetem informatikus és villamosmérnöki szakjain előadott
számítógépes grafika tárgy tematikáját követi.
A könyv célja, hogy megtanítsa az olvasót arra, hogy hogyan kell grafikus
rendszereket fejleszteni. Az előismeretek is ennek megfelelőek, a könyv
nagy része ugyan csupán középiskolai matematikai és fizikai ismereteket
használ, azonban néhány rész épít a természettudományi és műszaki egyetemeken
oktatott matematikára is.
Habár a könyv elsősorban szoftverfejlesztőknek szól, a magam részéről
reménykedem abban, hogy a szoftverfejlesztőkön kívül a grafikus rendszerek
felhasználóihoz és a számítógépes játékokat megszállottként űzőkhöz is
eljut, és ezáltal jobban megértik és megbecsülik kedvenc alkalmazói rendszerüket,
és talán kedvet kapnak ahhoz is, hogy a felhasználók roppant széles táborából
a fejlesztők sokkal szűkebb táborába kalandozzanak el.
A könyv tartalomjegyzéke
Előszó
A számítógépes grafika céljai és feladatai
A modellezés feladatai
A képszintézis
A számítógépes grafika jelfeldolgozási megközelítése
Rasztergrafikus rendszerek felépítése
A képek tárolása és utófeldolgozása
Program: TARGA formátumú képállományok kezelése
Grafikus szoftver alrendszerek felépítése
Programvezérelt és eseményvezérelt interakció
A grafikus hardver illesztése
Program: egy egyszerű grafikus könyvtár
A logikai és a fizikai szintek összekapcsolása
A könyvtár megvalósítása DOS operációs rendszer alatt
A könyvtár megvalósítása Ms-Windows környezetben
Programtervezés eseményvezérelt környezetekben
A geometriai modellezés
Pontok
Görbék
Szabadformájú görbék
Lagrange-interpoláció
Bezier-approximáció
Összetett görbék
Harmadfokú spline
B-spline
Területek
Felületek
Kvadratikus felületek
Parametrikus felületek
Testek
Felület-modellezés
Konstruktív tömörtest geometria alapú modellezés
Program: paraméteres görbék
Színelméleti alapok
A színek definiálása
RGB színrendszer
CMY színrendszer
HLS színrendszer
Színkezelés a 2D és a 3D grafikában
Program: színkezelés
Színillesztő függvények
Spektrumok kezelése
Színérzetek
CMY átalakítása RGB modellre
HLS átalakítása RGB modellre
Geometriai transzformációk
Elemi affin transzformációk
Eltolás
Skálázás a koordinátatengely mentén
Forgatás
Nyírás
Transzformációk homogén koordinátás megadása
Transzformációk projektív geometriai megközelítése
Program: geometriai transzformációs osztály
Virtuális világmodellek tárolása
Hierarchikus adatszerkezet
A geometria és topológia szétválasztása
CSG-fa
Megjelenítő állományok
Szabványos világmodellek
Program: hierarchikus 3D adatszerkezet
A 2D képszintézis
Vektorizáció
Modellezési transzformáció
Ablak-nézet transzformáció
A modellezési és az ablak-nézet transzformációk összefűzése
2D vágás
Szakaszok vágása
Poligonok vágása
2D raszterizáció
Szakaszok rajzolása
Asszimetrikus DDA szakaszrajzoló algoritmus
Bresenham szakaszrajzoló algoritmus
Terület elárasztás
Területkitöltés
Pixel műveletek
Dither alkalmazása
Interaktív 2D grafikus rendszerek
A kiválasztási művelet
Program: 2D grafikus rendszer
Az árnyalás optikai alapmodellje
A fényerősség alapvető mértékei
A kamerák jellemzése
A fény-felület kölcsönhatás: az árnyalási egyenlet
Az árnyalási egyenlet adjungáltja: a potenciál egyenlet
Az árnyalási illetve a potenciál egyenlet megoldása
BRDF modellek
Klasszikus BRDF modellek
Lambert-törvény
Ideális visszaverődés
Ideális törés
Phong illuminációs modell és változatai
Fényelnyelő anyagok
Program: BRDF modellek
A 3D inkrementális képszintézis
Felületek tesszellációja
Modellezési transzformáció
Kamera definíció
A nézeti transzformáció
Világ-koordinátarendszer --- ablak-koordinátarendszer transzformáció
Ablak-képtér transzformáció párhuzamos vetítés esetén
Ablak-képtér transzformáció perspektív vetítés esetén
Nézeti csővezeték
Vágás homogén koordinátákban
Takarási feladat megoldása
Triviális hátsólap eldobás
Z-buffer algoritmus
Területfelosztó módszerek
Festő algoritmus
Lokális illuminációs algoritmusok
Saját színnel történő árnyalás
Konstans árnyalás
Gouraud-árnyalás
Phong-árnyalás
Program: 3D grafikus rendszer inkrementális képszintézissel
A 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
A rekurzív sugárkövető program
Metszéspontszámítás egyszerű felületekre
Háromszögek metszése
Implicit felületek metszése
Paraméteres felületek metszése
Transzformált objektumok metszése
CSG modellek metszése
A metszéspontszámítás gyorsítási lehetőségei
Befoglaló keretek
Az objektumtér szabályos felosztása
Az objektumtér adaptív felosztása
Foton követés
Program: Rekurzív sugárkövetés
Globális illuminációs algoritmusok
Integrálegyenletek megoldása
Inverzió
Véges-elem módszer
Expanzió
Monte-Carlo integrálás
Iteráció
Diffúz eset: radiosity
Forma faktor számítás
A lineáris egyenletrendszer megoldása
Progresszív finomítás
Véletlen bolyongáson alapuló algoritmusok
Inverz fényút követés
Fény követés
Kétirányú fényút követés
Foton térkép
Program: Inverz fényútkövetés
Raszteres képek csipkézettségének a csökkentése
Előszűrés
A szakaszok csipkézettségének csökkentése
Utószűrés
Program: sugárkövetés kiegészítése csipkézettség csökkentéssel
Textúra leképzés
Paraméterezés
Explicit egyenlettel definiált felületek paraméterezése
Háromszögek paraméterezése
Textúra leképzés a sugárkövetésben
Textúra leképzés az inkrementális képszintézisben
A textúrák szűrése
A képpiramis
Bucka leképzés
Visszaverődés leképzés
Program: sugárkövetés kiegészítése textúraleképzéssel
Térfogat modellek és térfogat-vizualizáció
Direkt térfogat-vizualizációs módszerek
Térfogat vetítés
Térfogati sugárkövetés
A voxel szín és az opacitás származtatása
Indirekt térfogat-vizualizációs módszerek
Masírozó kockák algoritmusa
Fourier tér módszerek
Program: Masírozó kockák algoritmusa
Fraktálok
A Hausdorff-dimenzió
Fraktális dimenzió nem önhasonló objektumokra
Brown-mozgás alkalmazása
Kaotikus dinamikus rendszerek
Kaotikus dinamikus rendszerek a síkon
Julia-halmazok
A Mandelbrot-halmaz
Iterált függvényrendszerek
Iterált függvényrendszerek attraktorának előállítása
IFS modellezés
Fraktális képtömörítés
Program: IFS rajzoló
Számítógépes animáció
Pozíció-orientáció mátrixok interpolációja
A kameraparaméterek interpolációja
Mozgás tervezés
Dupla pufferelés
CD melléklet
Galéria
3D modellek
POV-Ray sugárkövető program
DOOM shareware változatok
Eagles helikopterszimulátor
Stingray Monte-Carlo sugárkövető program
OpenGL anyagok
DirectX anyagok
MGF formátumelemző
JPEG megjelenítő
Demonstrációs programok a könyv fejezeteihez
-
A programokat felépítő közös fájlok
-
Grafikus keretrendszer Ms-Windows és DOS/BGI környezetre
-
Példa alkalmazások
-
TARGA formátumú képek megjelenítése: tgashow.exe
-
Gumivonal rajzoló program: gumi.exe
-
Színszerkesztő: color.exe
-
2D grafikus rendszer: 2d.exe
-
3D grafikus rendszer inkrementális képszintézissel: 3d.exe
-
Sugárkövetés: ray.exe
-
Térfogat-vizualizáció masírozó kockák algoritmussal: march.exe
-
IFS megjelenítő: ifs.exe
Irodalomjegyzék
Tárgymutató