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).

OpenGL
OpenGL logo.svg
Linux kernel and OpenGL video games.svg

Fejlesztő Silicon Graphics
Legfrissebb stabil
kiadás
4.6
(2017, július 31.)
Legfrissebb fejlesztői kiadásismeretlen +/-
Programozási nyelv
  • C
  • OpenGL Shading Language
Operációs rendszer Platformfüggetlen
Kategória API
Licenc Változó
Az OpenGL weboldala

CéljaSzerkesztés

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:

 
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éldaSzerkesztés

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óSzerkesztés

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 ISBN 0-321-48100-3
    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 ISBN 0-321-17383-X
    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
    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. ISBN 0-201-40709-4
    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 ISBN 0-321-33489-2
    Könnyen érthető gyakorlati és referencia könyv a GLSL-hez.

További információkSzerkesztés