Elõszó A számítógépek fejlõdését tekintve réges-régen (azoknak, akik a valóságban ragadtak, ez azt jelenti, hogy mintegy 15 éve) egy rendszerfüggetlen grafikaleképezõ alkalmazás fejlesztése nagy kihívást jelentett – és akkor még finoman fogalmaztam. A gondot nem is annyira a számítógépek hardvere, mint a szoftver és az alkalmazásprogramozási felületek (API-k) jelentették. A gyártók saját programkönyvtárakat készítettek, és saját eljárásokat dolgoztak ki, hogy rábírják a hardvert, hogy képeket rajzoljon a képernyõnkre. Ezek mindegyikét szabadalom védte, és a különbözõ gyártók hardverén futó alkalmazásoknak hatalmas mennyiségû, #ifdef blokkok közé szorított kódot kellett tartalmazniuk. Ettõl sajnos még ma sem sikerült teljesen megszabadulni, de a grafika terén kétségkívül javult a helyzet. Nagyjából ekkor történt, hogy ügyes programozók egy csoportja, akik a számítógépek hardverének és az azt mûködtetõ felületeknek a készítésében jelentõs tapasztalatokat szereztek, megkísérelt megoldást adni a problémára. Az általuk megalkotott függvénykönyvtárat ugyan egyetlen cég, a Silicon Graphics Computer Systems Inc. tervezte és valósította meg, ám szokatlan módon (és talán ez volt a leginkább újító ötlet) ezt a felületet megosztották a versenytársakkal, sõt azok javaslatait és függvényeit is befogadták és beépítették a könyvtárba. Az OpenGL tehát egy nagy, szeretõ családba született – ez volt az OpenGL Architecture Review Board (az „ARB”) –, ahol megértették, hogy a számítógép és a grafika mit sem ér a hozzájuk kapcsolódó alkalmazások nélkül. Ha belegondolunk, hogy mivel jár egy olyan programozási felület megtervezése, amely kellõen elvont ahhoz, hogy kiküszöbölje a grafikai algoritmusok különféle megvalósításai között óhatatlanul fennálló különbségeket, megérthetjük, micsoda embert próbáló feladat volt ez. Ezen kívül ahhoz, hogy az új felületet elfogadják és használni kezdjék, a felületnek nem csupán elég egyszerûnek kellett lennie az egyes feladatok elvégzéséhez, de meg kellett felelnie az interaktív 3D komputergrafika alapkövetelményének,
x OpenGL röviden
ami nem más, mint a lehetõ legnagyobb hatékonyság és sebesség. A használat egyszerûségét és a gyorsaságot ritkán sikerül egyszerre elérni, de a szoftvermérnökök munkájának tulajdonképpen ez a lényege, ezt a felületet pedig az alapkövetelmények kidolgozásával párhuzamosan fejlesztették. Jelentõsen nehezítette a fejlesztést az is, amivel az OpenGL megalkotói persze tisztában voltak: a számítógépes grafika a munka megkezdésekor alig nõtt ki a csecsemõkorból. A grafikai eljárások és hardveres megvalósításaik fejlõdése azonban akkorra már teljes lendületet vett, ezért ha az OpenGL versenyben kívánt maradni, együtt kellett fejlõdnie a területtel. Szédítõ. Most azonban tekerjük elõre a szalagot a jelenhez. A könyv, amelyet az Olvasó a kezében tart, az OpenGL-rõl szól: a rendszerfüggetlen 3D komputergrafika és képfeldolgozás uralkodó programozási felületérõl – ugyanarról a felületrõl, amelynek megtervezését annyi évvel ezelõtt elhatározták. Az OpenGL hû maradt az örökségéhez: a kezdõk könnyen elsajátíthatják a használatát, hogy interaktív, térgrafikai elemeket megjelenítõ alkalmazásokat készítsenek, de elég erõteljes ahhoz, hogy motorja legyen a leginkább teljesítményérzékeny grafikai alkalmazásoknak is. Ez utóbbi eléréséhez azonban a felület (illetve annak a kötet írásakor legújabb, 2.0-s változata) több mint 800 belépési pontot tartalmaz, hogy a számítógépes grafikában ma használatos minden szolgáltatáshoz hozzáférhessünk az OpenGL nyelvén. E töménytelen függvény és eljárás között könnyû eltévedni, ezért egy tapasztalt kalauz nagy segítségünkre lehet. Erre a feladatra vállalkozik Paul Martz, a komputergrafikusok közösségének régi tagja, aki nem csak figyelemmel követte, hanem maga is elõsegítette az OpenGL fejlõdését, és most kész megosztani tapasztalatait az Olvasóval, hogy az OpenGL-programozóvá válásig vezetõ utat minél fájdalommentesebbé tegye. Paul teljességében áttekintette az OpenGL-t, és kiszûrve belõle a modern OpenGL-programozás nélkülözhetetlen elemeit, egy kötetbe gyûjtötte a legfontosabb irányelveket. Teljesítményét csak elismeréssel illethetem, az Olvasónak pedig sok sikert kívánok az OpenGL-hez! Jó leképezést! Dave Shreiner Mountain View, CA 2006. január
Bevezetés „Az NVIDIA alapvetõ célkitûzése, hogy hat hónaponként olyan áttörést jelentõ terméket dobjon piacra, amely a Moore-törvényben leírt fejlõdési sebességet lényegében négyzetre emelve megkétszerezi az elõzõ generáció teljesítményét.” Jen-Hsung Huang „A kisgyermek kúszik, mielõtt járni kezdene, és lépked, mielõtt futna – egyik fejlõdési lépcsõ sem képzelhetõ el az azt megelõzõ nélkül. Lillian Breslow Rubin A számítógépes grafika területe a többi komputertechnológiáéhoz hasonlóan döbbenetes iramban fejlõdik. Az 1990-es évek végén az elsõ, nagyközönségnek szánt, hardveres gyorsítást alkalmazó 3D grafikus kártyák megjelenése a térgrafikai szoftverfejlesztés új korszakának hajnalát jelentette. Ezek a kártyák ma halomba gyûlnek a szeméttelepeken, ahogy egyre erõsebb és fejlettebb hardvereszközök veszik át a helyüket. Ha csak most ismerkedünk az OpenGL-lel, valószínûleg az a vágyunk, hogy fejest ugorhassunk az összetett OpenGL-alkalmazások rejtelmeibe, és minél gyorsabban ilyen programokat írhassunk. Bár számtalan könyvet írtak, amely haladó szinten tárgyalja a grafikai programozást, a legtöbb jártasságot feltételez az OpenGL vagy egy másik térgrafikai alkalmazásprogramozási felület (API) használatában, ezért mielõtt bonyolultabb programozási feladatokba foghatnánk, valamilyen módon gyorsan el kell sajátítanunk az OpenGL alapjait.
xii OpenGL röviden
Kötetünkrõl Az OpenGL® röviden lényegre törõ könyv, amely a modern, nagy teljesítményû, rendszerfüggetlen 3D komputergrafikai API-k ipari szabványának számító OpenGL legfontosabb, leggyakrabban használt szolgáltatásait mutatja be. A kötet az algoritmusok tárgyalása helyett az OpenGL alapvetõ eljárásait helyezi a középpontba, további forrásokhoz irányítva az érdeklõdõ olvasót, így gyorsan és tömör formában juthatunk hasznos információkhoz. Az OpenGL 1.0 jelû változatát az SGI 1992-ben jelentette meg, és az gyorsan átvette a hatalmat a 3D szoftverfejlesztésben. Az OpenGL több változatban, Microsoft Windows, Linux, Unix és Apple Mac OS rendszerekhez is elérhetõ, az OpenGL-t támogató grafikushardver-gyártók között pedig olyan cégeket találunk, mint a 3DLabs, az ATI, az Intel, a Matrox, az NVIDIA vagy az SGI. Az OpenGL népszerûségének egyik nyilvánvaló oka, hogy nyílt szabvány. Szolgáltatáskészletét az OpenGL Architecture Review Board (ARB) határozza meg, mely testületben több jelentõs hardver- és szoftvercég képviselõi kapnak helyet.1 A testület rendszeresen ülésezik, hogy megvitassa és jóváhagyja az OpenGL-szabvány kiegészítéseit és módosításait. Az a tény, hogy az ARB-ben több cég is képviselteti magát, biztosítja, hogy az OpenGL egyformán jól fusson a grafikus architektúrák széles körén. Ez a kötet az OpenGL 2004 szeptemberében kiadott, 2.0-s változatát írja le. Bár az OpenGL jelentõs változásokon ment keresztül elsõ megjelenése óta, minden változata együttmûködõképes maradt a korábbi változatokkal. A visszamenõleges megfelelõség elõnyei nyilvánvalóak, és számos vállalat ki is aknázza az OpenGL-nek a szoftverfejlesztés költségeit csökkentõ stabilitását. Természetesen az idõk során egyes régebbi OpenGL-szolgáltatások elavulttá váltak, ahogy az ARB új leképezõfüggvényekkel és megoldásokkal egészítette ki az OpenGL-szabványt. Más szolgáltatásokkal a fejlesztõk közössége nem tudott (különbözõ okokból) soha igazán megbarátkozni: ilyen volt az együttható szélsõséges körülmények közötti (corner-case) vagy rendszerfüggetlen alkalmazhatóság, az egymást átfedõ vagy korlátozott szolgáltatások, vagy a majdnem általános nem hatékony megvalósítás. Az új szolgáltatások hozzáadása a régi (és egyre inkább elavult) képességek megtartása mellett vaskos és egyre bonyolultabb OpenGL-szabványt eredményezett. Az összehasonlítás kedvéért: • Az 1992-ben megjelent eredeti OpenGL 1.0 szabvány 163 oldalból állt. Ma az OpenGL 2.0 szabvány 368 oldalas, az OpenGL Shading Language kiegészítés pedig a teljes terjedelmet 474 oldalra növeli. 1 Az ARB szavazati joggal rendelkezõ tagjai 2006 januárjában a következõk voltak: a 3DLabs, az Apple, az ATI, a Dell, az IBM, az Intel, az NVIDIA, az SGI és a Sun.
OpenGL röviden xiii
• Az Addison-Wesley alapmûnek számító, az OpenGL 1.0 szabványt leíró OpenGL® Programming Guide és OpenGL® Reference Manual címû kötetei (a vörös és a kék könyv), amelyek elsõ kiadása 1993-ban jelent meg, összesen 960 oldalra rúgtak. Legújabb kiadásaik, amelyekben az OpenGL 1.4 és 2.0 leírása szerepel, együttesen már 1600 oldalt tesznek ki. Ha ehhez hozzáadjuk a nemrégiben megjelent OpenGL® Shading Language második kiadását (a narancs könyvet), az oldalszám 2400-ra emelkedik. Bár az ilyen kimerítõ leírások nélkülözhetetlenek a tapasztalt programozók számára, a dokumentáció méretének és összetettségének növekedése az évek során az újsütetû OpenGL-fejlesztõk tanulási idejét is jelentõsen megnövelte, ráadásul az információtömeg puszta mérete, illetve az elavult megoldások tanulmányozására pazarolt idõ miatt az újoncok a javasolt eljárásokkal kapcsolatos információkat is nehezebben találják meg. Az OpenGL® röviden ezt a problémát azzal igyekszik kikerülni, hogy az OpenGL-nek csak a lényeges, a jelenlegi 3D szoftverfejlesztésben alkalmazott elemeit mutatja be, és a tárgyalásból kihagyja a programozási felület számos szolgáltatását. A kötet a modern OpenGLprogramozásban általánosan használt szolgáltatásokra és elfogadott eljárásokra összpontosít, a ma már elavultnak számító megoldásokra pedig csak akkor tér ki, ha azok lényeges fogalmakat vagy javasolt eljárásokat segítenek megvilágítani. Az egyes fejezetek tartalmát, illetve a nem tárgyalt témákat minden fejezet elején összefoglaljuk. Az OpenGL® röviden azzal is igyekszik gördülékenyebbé tenni a tanulást, hogy az ismereteket közvetlen stílusban, a „Hogyan”-leírásokhoz hasonlóan adja át, így az olvasók gyorsan megtalálhatják a keresett információt, anélkül, hogy felesleges anyagok tömegén kellene átverekedniük magukat. Ez az oka annak, hogy a grafikai algoritmusoknak kevés teret és magyarázatot szenteltünk. Az árnyékoló algoritmusok (amelyekkel a 6. fejezetben foglalkozunk) jelentik az egyetlen kivételt, mert ezek szinte mindenütt alkalmazhatók, és nincs hozzájuk közvetlen OpenGL-támogatás. Más algoritmusok esetében az OpenGL® röviden feltételezi, hogy az olvasó jártas a számítógépes grafikában, de legalábbis egyetemi szintû grafikai kurzus keretében olvassa a kötetet. Könyvünk az OpenGL-nek azt a részhalmazát mutatja be, amellyel a legtöbb programozó az OpenGL-programozás során felmerülõ feladatok nagy részét képes elvégezni. Mivel az anyag nem ad teljes leírást, az olvasó valószínûleg bõvíteni szeretné majd ismereteit, ezért a kötetet úgy is tekinthetjük, mint egy útitérképet, amely további OpenGL- és térgrafika-programozási ismeretekhez vezet el minket. A könyvben gyakran hivatkozunk a következõ forrásokra: • az OpenGL hivatalos webhelyére a http://www.opengl.org internetcímen, amely számos fejlesztõi fórumnak, példaprogramnak, segédkönyvtárnak, mûszaki leírásnak, dokumentációnak, hiperhivatkozásnak és más értékes OpenGL-forrásnak ad otthont;
xiv OpenGL röviden
• a Mark Segal és Kurt Akeley által írt és Jon Leech által szerkesztett, az OpenGL webhelyérõl PDF fájlként szabadon letölthetõ The OpenGL Graphics System: A Specification leírásra, amely az OpenGL teljes, formális leírása, és amely – bár az OpenGL-megvalósítóinak szánták – nélkülözhetetlen minden alkalmazásprogramozó számára; • az OpenGL® Programming Guide (szerzõi az OpenGL ARB, Dave Shreiner, Mason Woo, Jackie Neider és Tom Davis, kiadója az Addison-Wesley), ismertebb nevén a vörös könyv ötödik kiadására, amely az OpenGL-programozás alapmûve, és kimerítõen tárgyalja a grafikai algoritmusokat és azok OpenGL-beli megvalósítását; • az OpenGL® Reference Manual (szerzõi az OpenGL ARB és Dave Shreiner, kiadója az Addison-Wesley), ismertebb nevén a kék könyv negyedik kiadására, amely az OpenGL-programozók elsõ számú kézikönyve; • az OpenGL® Shading Language (szerzõje Randi Rost, kiadója az Addison-Wesley), ismertebb nevén a narancs könyv második kiadására, amely az OpenGL-nek a programozható grafikus hardverhez kapcsolódó felületét írja le (ez a szolgáltatás az OpenGL 2.0 szabvány része); • a Computer Graphics: Principles and Practice (szerzõi James D. Foley, Andries van Dam, Steven K. Feiner és John F. Hughes, kiadója az Addison-Wesley) második kiadására, illetve a 3D Computer Graphics (írta Alan Watt, kiadta az Addison-Wesley) címû könyvre – mindkettõ kitûnõ általános forrás a síkbeli és térbeli számítógépes grafikához.
A könyv célközönsége Az OpenGL® röviden olyan C++-programozóknak íródott, akik most ismerkednek az OpenGL-lel. A kötet feltételez némi (mérsékelt) jártasságot a számítógépes grafikában: az olvasónak tisztában kell lennie a grafikus erõforrásokkal, szövegekkel és algoritmusokkal, de konkrét grafikai tapasztalatokra nincs szükség ahhoz, hogy haszonnal forgathassuk a könyvet; például nem kell tudni, hogyan kódoljuk a Bresenham-algoritmust, viszont érteni kell a letapogatási átalakítás (scan conversion) fogalmát. A más grafikai API-kkal szerzett tapasztalat elõnyt jelent, de nem elõfeltétele annak, hogy megértsük a könyvet. Ismerni kell viszont a C++ programozási nyelvet. A könyv webhelyén elérhetõ példakódok C++ nyelvûek, és lefordíthatók, illetve futtathatók Microsoft Windows, Apple Mac OS, valamint a legtöbb Unix- és Linux-rendszeren. A könyv kódtöredékeinek többsége érthetõ kell legyen mindenki számára, aki jártas a C programozási nyelvben, és fel tud lapozni egy C++-kézikönyvet. Az olvasónak a fentieken kívül rendelkeznie kell a szokványos lineárisalgebra-kurzusokon oktatott vektor- és mátrixmatematikai ismeretekkel, például értenie kell a mátrixösszefûzés és a vektor-mátrix szorzás lényegét. Azok, akik egy másik térgrafikai API-ból már ismerik a transzformációkat és a koordinátarendszereket, könnyû olvasmánynak
OpenGL röviden xv
fogják találni ezt a kötetet. Azok, akiknek ezek a témák újdonságnak számítanak, számtalan 3D grafikával foglalkozó mûvet találhatnak, amelyekbõl kielégítõ tudásra tehetnek szert; fellapozhatják például a Computer Graphics: Principles and Practice 5. fejezetét (Geometrical Transformations). Az olvasónak természetesen alapvetõ matematikai – algebrai, geometriai, trigonometriai – ismeretekkel is rendelkeznie kell.
A könyv szerkezete Az OpenGL® röviden nyolc fejezetbõl, négy függelékbõl és egy tárgymutatóból áll: • Az 1. fejezet (Bevezetés az OpenGL világába) az OpenGL architektúráját és fogalmait mutatja be nagy vonalakban, valamint megismertet a GLUT és a GLU segédkönyvtárakkal, illetve az OpenGL-fejlesztõkörnyezet beállításával, majd bemutat egy egyszerû OpenGL-példát. A fejezet az OpenGL API történetének részletes leírásával ér véget. • A 2. fejezet (Elemi alakzatok rajzolása) azt tárgyalja, hogyan képezhetünk le geometriai adatokat az OpenGL-lel. Leírja az OpenGL elemi rajzolási típusait és azt, hogy miként képezhetjük le ezeket csúcstömbök és tárolóobjektumok segítségével. A fejezetben a rajzolás más részleteivel is megismerkedünk, például a képkockatár kiürítésével, a sorrendfüggõséggel, illetve a mélységteszteléssel. • A 3. fejezetben (Transzformációk és nézetek) az OpenGL transzformációs csõvezetéke kerül terítékre. Górcsõ alá vesszük a nézetek elhelyezésének és tájolásának módját, a perspektivikus és ortografikus vetületeket, illetve a nézetablak szabályozását, valamint a nézetnek az egérrel történõ interaktív módosítását. • A 4. fejezet (Megvilágítás) a fények helyét, irányát és színét, valamint az anyagok fényvisszaverését szabályozó megvilágítási paraméterek beállítását tárgyalja. • Az 5. fejezet (Képpont-téglalapok) azt mutatja be, hogyan közelíti meg az OpenGL a képpontadatok blokkjainak kirajzolását, kiolvasását, illetve másolását. • A 6. fejezetben (Mintázattérképek) az anyagmintázat-objektumok létrehozásával és azoknak a leképezett testekre való alkalmazásával folytatjuk. A mintázattérképezés hatékony eszköz a leképezett grafikák valószerûségének fokozására – ebben a fejezetben a tükrözõ fényfoltok, a környezettérképek és az árnyékok valósághûségét növelõ megoldásokat mutatjuk be. • A 7. fejezetet (Bõvítmények és változatok) az olyan rendszer- és változatfüggetlen kódok írásának szenteltük, amelyek megvalósításfüggõ grafikushardver-szolgáltatásokra épülnek. • A 8. fejezetben (Rendszerfüggõ felületek) az Apple Mac OS-ra, a Linuxra és a Microsoft Windowsra jellemzõ egyedi OpenGL-felületeket mutatjuk be. Megmutatjuk, hogyan hozhatunk létre és használhatunk több OpenGL-leképezõkörnyezetet, és hogyan oszthatunk meg közöttük objektumokat.
xvi OpenGL röviden
• Az A függelék (Egyéb szolgáltatások) röviden ismertet néhány olyan OpenGLszolgáltatást, amely meghaladta a könyv kereteit, például az OpenGL Shading Language nyelvet, a vágósíkokat, a ködöt, a többszörös mintavételt és a stencilezést. • A B függelék (Programozási irányelvek) olyan általánosan elfogadott OpenGLprogramozási irányelveket mutat be, amelyek segítenek, hogy megbízható és hordozható OpenGL-alkalmazásokat írjunk. • A C függelék (Teljesítmény) témáját a precíz idõmérés adja, amelynek alapján azonosíthatjuk és megszüntethetjük a teljesítményt visszafogó szûk keresztmetszeteket. • A D függelékben (Hibakeresés és hibaelhárítás) a leggyakrabban elõforduló problémák elhárításához adunk segítséget.
A könyvben használt jelölések Sokan, miután elolvasták ezt a kötetet, megvásárolják az OpenGL® Programming Guide-ot is. Hogy megkönnyítsük az átmenetet a két könyv között, ahol csak lehetett, ugyanazokat a jelöléseket alkalmaztuk mindkét mûben. Az OpenGL® röviden-ben az alábbi jelölésekkel találkozhatunk: • Félkövér, azonos szélességû betûk – OpenGL belépési pontok, függvénynevek és mátrixok. • Dõlt betûk – Változók, argumentumok, paraméternevek, térbeli dimenziók és mátrixösszetevõk. • Azonos szélességû betûk – Felsoroló típusok és értékek, meghatározott állandók, forráskódok, hivatkozások, fájlnevek és elérési utak. A kódblokkokat a szövegtörzstõl elkülönítve, azonos szélességû betûkkel szedtük. A kötetben az OpenGL-parancsokat a parancs összefoglalása vezeti be, amelyben a függvény prototípusa, a parancs paramétereinek leírása, valamint az OpenGL-változatokra vonatkozó információk kaptak helyet. A parancs-összefoglalások sablonja tehát így fest:
A parancs függvényprototípusa A parancs és paramétereinek leírása OpenGL-változat: a parancsot támogató OpenGL-változatok
OpenGL röviden xvii
A függvényprototípusban a lehetõségek zárójelek között szerepelnek. Példaként nézzük a glLight*v() függvényhalmazt:
void glLight[fd]v( GLenum fény, GLenum pnév, const TÍPUS* param ); Ez a prototípus két függvényt határoz meg: a glLightfv() és a glLightdv() nevûeket. Az f és a d a paraméter adattípusát – GLfloat és GLdouble – azonosítja. A függvényprototípus paraméterlistájában a TÍPUS paramétert a megfelelõ adattípusra kell cserélnünk.
A parancs-összefoglalást tömör hivatkozásként használhatjuk a parancshoz; az OpenGL® Reference Manual jellemzõen kimerítõbb leírásokat tartalmaz.
Az OpenGL® röviden webhelye A könyv webhelyén, a http://www.opengldistilled.com internetcímen a kötet valamennyi példakódját elérhetjük. A fájlok letöltéséhez kattintsunk a Download (Letöltés) hivatkozásra. Minden kódot lefordítottunk és kipróbáltunk a következõ rendszereken: Microsoft Windows XP, Visual Studio 6.0-val, .NET 2003-mal, illetve Cygwin fejlesztõkörnyezettel; Apple Mac OS X, Xcode 2.0-val; valamint Red Hat Linux, GNU fordítókkal. Természetesen a Kiskapu Kiadó webhelyérõl is letölthetõk a következõ címrõl: http://www.kiskapukiado.hu/133
A példakódokhoz a GLUT, a TIFF könyvtár és a GNU Make szükséges. A webhelyen ezeknek a könyvtáraknak és segédprogramoknak a letöltéséhez is találunk hivatkozásokat. Az OpenGL® röviden-ben színes táblákra való hivatkozásokat is találunk; ezek PDF állományként hozzáférhetõk a könyv webhelyén, valamint az Addison-Wesley honlapján, a http://www.awprofessional.com/title/0321336798 címen. A könyvben felfedezett esetleges hibák javítását a könyv webhelyén tesszük közzé.
xviii OpenGL röviden
Köszönetnyilvánítás Egy könyv elkészítése túlságosan nagy feladat egyetlen embernek. Ez a könyv sem jöhetett volna létre, ha nincs sok-sok ember áldozatos munkája. Szeretnék köszönetet mondani Brenda Mulligannek, az Addison-Wesley korábbi munkatársának, aki megadta a kezdõlökést, és egyébként is rengeteg segítséget nyújtott az írás kezdeti szakaszában. Nélküle a terv már az elején dugába dõlt volna. Köszönet jár az Addison-Wesley egész csapatának, akik név szerint a következõk voltak: Debra Williams Cauley, Mary O’Brien, Marty Rabinowitz, Curt Johnson, Tyrrell Albaugh, Noreen Regina, Julie Nahil, Jessica D’Amico, valamint Chris Zahn – neki külön köszönet jár, amiért elolvasott minden egyes szót, ami mindenkit, aki nem programozó, bizonyára kómás állapotba juttatott volna. Az Addison-Wesley rendkívüli szakmai lektori stábot hozott össze: Eric Chan, Martin Ecker, Jeffrey Galinovsky, Bill Licea-Kane, Scott Nations, Marc Olano, Randi Rost, Jeremy Sandmel, Dave Schreiner és mások felbecsülhetetlen tapasztalataikkal, lényeglátó észrevételeikkel és konstruktív ötleteikkel járultak hozzá a könyv fejlõdéséhez, a kivonattól a mintafejezeten és az elsõ vázlaton át a végleges formáig. A példakódokért sokaknak tartozom köszönettel. Legmélyebb hálám a Hewlett-Packardnak és korábbi munkatársaimnak, Courtney Goeltzen Leuchternek és Jeff Burrellnek, akik a forráskódok kidolgozásának idejére kölcsönöztek nekem egy Linux-gépet. Köszönet jár Brian Stempelnek, aki az AGL példakódot írta, illetve a példákat Apple rendszeren tesztelte, és Apple-témában az általános tanácsadó szerepét töltötte be. Jövök neked egy sörrel, Brian. Köszönet mûvész- és utazótársamnak, Dean Randazzónak, aki rendelkezésemre bocsátotta egyik fantasztikus fotográfiáját, amelyet mintázattérképként használhattam a SecondaryColor-példában. Szeretnénk köszönetet mondani munkaadómnak, a SimAuthor cégnek is a Grand Teton régiónak a TextureMapping-példában használt domborzati és mintázattérképéért. A SimAuthornak köszönöm a támogatást és a lehetõséget is, hogy használhattam az erõforrásaikat. Kalapemelés jár John Plattnek és Charlie Douglasnek is – a kéthetente lejátszott pókerpartik gondoskodtak róla, hogy ne õrüljek bele a munkába. Õszinte hálámat szeretném még kifejezni a segítségért az olyan kiválóságoknak, mint Jon Leech az SGI-nél, Brian Paul (a Mesa megalkotója), Bill Licea-Kane és mások, akik türelmesen válaszoltak az OpenGL-lel kapcsolatos kérdéseimre.
OpenGL röviden xix
Alex Berry a Seven21 Productionstõl nagyszerûen alakította át gyermeki egyszerûségû rajzaimat professzionális diagramokká, Chris Hansen (3D Nature) és Matt Gadda (SimAuthor) OpenGL-fejlesztõ kollégáim pedig a könyv egy-egy részét lektorálták, és hasznos tanácsokkal láttak el. Köszönet mindnyájuknak. Mindenképpen köszönetet kell mondanom feleségemnek, Deedre Martznak. Dee mindvégig teljes mértékben támogatott, úgy, ahogy bármely szerzõ felesége tenné, miközben estéinket és hétvégéinket ennek a könyvnek az írásával töltöttem. Ezen túlmenõen azonban mûszaki dokumentációíróként szerzett tapasztalataival is segített; az õ tanácsainak köszönhetõ a könyv professzionális hangvétele. Valójában majdnem mindent tõle tanultam ezen a téren. Végül szeretném hálámat kifejezni Andy Goodrichnek, Spencer Thomasnak és Bert Herzognak, akik sok évvel ezelõtt elindítottak a térgrafikusi pályán. Köszönöm nekik, hogy kinyitották elõttem egy csodálatos pálya kapuját.
A szerzõrõl Paul Martz a Colorado állambeli Boulderben tevékenykedõ SimAuthor Inc. vezetõ szoftvermérnöke, aki a vállalatnál repülési adatok képi megjelenítésére fejleszt OpenGL alapú programokat. A SimAuthor elõtt a Hewlett-Packard Graphics Software Lab, valamint az Evans & Sutherland Workstation Graphics Division részlegében dolgozott. Paul 1986 óta foglalkozik számítógépes grafikával; munkássága középpontjában a térgrafikai rendszerek és OpenGL-eszközmeghajtók fejlesztése áll. 1993-ban teljesítményérzékeny kódot írt az Evans & Sutherland elsõ OpenGL-termékéhez, az 1990-es évek végén pedig részt vett a HP-UX és a Microsoft Windows OpenGL-eszközmeghajtójának fejlesztésében, amelyet a Hewlett-Packard munkaállomásainak OpenGL alapú grafikus hardveréhez készítettek. Paul kivette a részét az OpenGL-szabványváltozatok értékelésébõl is; jelenleg független szakértõként az OpenGL Architecture Review Board munkáját segíti. Paul irányította az OpenGL mûszaki FAQ elkészítését, amelyet az OpenGL hivatalos webhelyén, a http://www.opengl.org internetcímen érhetünk el; emellett számos mûszaki szabványleírás és internetes oktatóanyag, illetve számítógépes grafikával foglalkozó könyvek kritikái fûzõdnek a nevéhez. Amikor nem az OpenGL-lel kapcsolatos tevékenységet végez, Paul rendszerint a pókerasztalnál gyûjti az ászokat, vagy dobjait püfölve kelt hatalmas zajt.