Az OpenGL (Open Graphics Library) egy részletesen kidolgozott szabvány, melyet a Silicon Graphics nevű amerikai cég fejlesztett ki 1992-ben. Olyan API-t takar, amely segítségével egy egyszerű, szabványos felületen keresztül megvalósítható a grafikus kártya kezelése és a háromdimenziós grafika programozása. Az interfész több ezer különböző függvényhívásból áll, melynek segítségével a programozók szinte közvetlenül vezérelhetik a grafikus kártyát, segítségükkel 3 dimenziós alakzatokat rajzolhatnak ki, és a kirajzolás módját szabályozhatják. Széleskörűen használják a számítógéppel segített tervezésben/gépészetben/gyártásban (CAD/CAM/CAE), a virtuális valóság létrehozatalában, a tudományos élet különböző területein, és szimulátorok esetében is. Ezenkívül használják a különféle videojátékokban, Windows, Linux, BSD platformokon (ez a "desktop" avagy hagyományos OpenGL) illetve mobiltelefonokon, játékkonzolokon (OpenGL ES).

Célja Az OpenGL két fő célja: Elrejteni különböző 3D-s gyorsítókkal való érintkezés bonyolultságát egyszerű és egységes API-t nyújtva. Elrejteni a hardware platformok különböző képességeit minden implementációban megkövetelve az OpenGL jellemzők teljes készletének támogatását (ha szükséges szoftveres emulációval). Az OpenGL alapműveletei primitívekkel dolgoznak, mint pl.: pontok, vonalak és sokszögek (poligonok). A grafika egy grafikus futószalag (pipeline) révén készül el, logikailag a folyamat egy kliens és egy szerver részre osztható fel. A legtöbb OpenGL parancs vagy kioszt egy primitívet a grafikus csővezetéknek, vagy meghatározza, hogy milyen sorrendben dolgozza fel ezeket. Az OpenGL 2.0 bevezetése előtt a futószalag vezérlése egy előre meghatározott szűk kereten belül volt konfigurálható. Az OpenGL 2.0 teljesen programozható a GLSL (pixel és vertex shaderek) segítségével, ugyanakkor a korábbi függvényekkel és eljárásokkal való kompatibilitás is teljesen megmarad.

Az OpenGL egy alacsony szintű, procedurális API, amelyet rajzolófüggvények meghívásával, és a grafika leképezését leíró állapotok módosításával lehet vezérelni.

Az OpenGL-t befolyásolta a 3D-s gyorsítók fejlődése, de segítette ezeket olyan alacsony szintű funkciókkal, amelyek a mai grafikus hardverekben már mind megtalálhatók:bélyegkép|jobbra|500px|Renderelés OpenGL-el (A Graphics Pipeline Process egyszerűsített változata) Alakzatok, mint pl.: polygonok, raszterizált pontok, és vonalak Transzformáció és fények kezelése Z-bufferelés (mélységi-pufferelés) Textúrázás Árnyalók (shaderek) Színkeverés

A renderelés kezdetén a vertex műveletek, transzformálás és világítás előfeldolgozása történik. A nem látható részek már ekkor eltűnnek a folyamatból. A következő lépés a raszterizáció vagy az előző információk pixelekké alakítása és a poligonok megjelenítése a megfelelő színnel. Ehhez kapcsolódnak még a per-fragment operációk, mint pl.: adatok frissítése, amelyek függnek az előzőleg tárolt és bejövő értékektől vagy színkombinációktól, illetve a pixel shaderek lefuttatása. A kész kép a frame-bufferbe kerül.

Sok modern 3D-s gyorsító biztosít módszereket, amelyek messze túlszárnyalják ezt az alap megközelítést, de azok az új technológiák általában csak továbbfejlesztései ennek.

Egy egyszerű példa Ez a példa egy zöld négyszöget rajzol a képernyőre. OpenGL alatt többféle módja van az megjelenítendő feladat megadására, de a lényeg, hogy megértse azt (képes legyen értelmezni). Az alábbi példa OpenGL 1.0 szabványú.

glClear( GL_COLOR_BUFFER_BIT ); A „Color Buffer” törlésre kerül, így a (kirajzolási) képernyő üres lesz.

glMatrixMode( GL_PROJECTION ); /* Beállítja, hogy a következő parancsok a projekciós mátrixra legyenek hatással */ glLoadIdentity(); /* A projekciós mátrixba betölti az egységmátrixot */ glFrustum( -1, 1, -1, 1, 1, 1000 ); /* Alkalmazza a perspektívikus projekciós mátrixot */ Ezek az utasítások inicializálják a projekciós mátrixot, beállítanak egy 3D-s csonka mátrixot, ami leképezi a látható területet. Átalakítja az objektumokat az OpenGL projekciós teréhez.

glMatrixMode( GL_MODELVIEW ); /* Beállítja, hogy a következő parancsok a modellnézet mátrixra legyenek hatással */ glLoadIdentity(); /* A modelnézeti mátrixba betölti az egységmátrixot */ glTranslatef( 0, 0, -3 ); /* Elmozgatja a modellnézetet a Z tengely mentén */ Ezek a parancsok alaphelyzetbe állítják a modellnézet-mátrixot, ami átalakítja a modell koordinátáit, a kameratérhez. A modellnézet és projekciós mátrixok kombinációja átalakítja az objektumokat a modelltérből, hogy azok a képernyőn megjeleníthetőek legyenek.

glBegin( GL_POLYGON ); // sokszög kezdése glColor3f( 0, 1, 0 ); // az aktuális szín beállítása zöldre (R,G,B - piros, zöld, kék) glVertex3f( -1, -1, 0 ); // a kezdő vertex létrehozása (x, y, z) glVertex3f( -1, 1, 0 ); // a következő vertex létrehozása glVertex3f( 1, 1, 0 ); // a következő vertex létrehozása glVertex3f( 1, -1, 0 ); // a következő vertex létrehozása glEnd(); // sokszög befejezése Ezek a parancsok kirajzolnak egy zöld színű négyszöget a képernyőre az XY síkra vonatkoztatva.

Dokumentáció Az OpenGL népszerűsége részben a hivatalos dokumentációk nagyszerűségének köszönhető. Az OpenGL ARB megjelentetett egy OpenGL kézikönyv sorozatot, a specifikációkkal együtt, amelyet folyamatosan frissítenek, hogy kövesse az API-ban történt változásokat. Ezek a kézikönyvek általánosan a borítójuk színe alapján ismertek:

The Red Book – OpenGL Programming Guide, 6. kiadás Egy könnyen érthető gyakorlati példákat is tartalmazó referencia könyv, amely minden OpenGL programozónak feltétlen szükséges. Ez első kiadás elérhető itt és itt. The Blue Book – OpenGL Reference manual, 4. kiadás Lényegében az OpenGL man oldalainak egy nyomtatott verziója. Tartalmaz egy poszter méretű kihajtható diagramot, amely egy ideálisan elkészített OpenGL implementációt tartalmaz. Itt elérhető. The Green Book – OpenGL Programming for the X Window System. Egy könyv az X11 interfészről és a GLUT-ról. The Alpha Book (aktuálisan fehér borítója van) – OpenGL Programming for Windows 95 and Windows NT. Egy könyv Microsoft Windows-t használóknak.

OpenGL 2.0 és magasabb verziókkal foglalkozó könyvek:

The Orange Book – OpenGL Shading Language, 2. kiadás Könnyen érthető gyakorlati és referencia könyv a GLSL-hez.

További információk

Kategória:3D-s számítógépes grafika Kategória:Számítógép-programozás Kategória:API-k