OpenGL

A Wikipédiából, a szabad enciklopédiából
OpenGL
OpenGL logo.jpg

Fejlesztő Silicon Graphics
Legfrissebb stabil
kiadás
4.4
(2013. július 22.)
Legfrissebb fejlesztői kiadás ismeretlen +/-
Programozási nyelv C
Operációs rendszer Platformfüggetlen
Kategória API
Licenc Változó
Az OpenGL weboldala

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 valósítható meg 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).

Konstrukció[szerkesztés | forrásszöveg szerkesztése]

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, ami a rendereléshez a programozó pontos lépéseit igényli. Nem úgy, mint a leíró API-knál, ahol a programozónak csak vázolnia kell a megjeleníteni kívánt objektumokat és hagyhatja, hogy a többit elvégezze magától. Az OpenGL alacsony szintű konstrukciója igényli, hogy a programozónak biztos tudása legyen a grafikus gyorsítás terén, de ad egy bizonyos fokú szabadságot az újszerű renderelő algoritmusok implementálásához.

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élda[szerkesztés | forrásszöveg szerkesztése]

Ez a példa egy zöld négyszöget rajzol a képernyőre. OpenGL nyelven 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).

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 | forrásszöveg szerkesztése]

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.