OpenGL
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 | |
Fejlesztő | Silicon Graphics |
Legfrissebb stabil kiadás | 4.6 (2017, július 31.) |
Programozási nyelv |
|
Operációs rendszer | Platformfüggetlen |
Kategória | API |
Licenc | Változó |
Az OpenGL weboldala |
Célja
szerkesztésAz 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
szerkesztésEz 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ésAz OpenGL népszerűsége részben a hivatalos dokumentációk nagyszerűségének köszönhető. Az OpenGL ARB Archiválva 2011. 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:
- The Red Book – OpenGL Programming Guide, 6. kiadás ISBN 0-321-48100-3
- The Blue Book – OpenGL Reference manual, 4. kiadás ISBN 0-321-17383-X
- 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ók
szerkesztés- Hivatalos oldal (angol)