Az OpenGL (OpenGraphics 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:
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éseglColor3f(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ásaglVertex3f(1,1,0);// a következő vertex létrehozásaglVertex3f(1,-1,0);// a következő vertex létrehozásaglEnd();// 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 ARBArchiválva2011. november 24-i dátummal a Wayback Machine-ben 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:
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.
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. ISBN 0-201-48359-9