OpenGL

OpenGL

FejlesztőSilicon Graphics
Legfrissebb stabil kiadás4.6
(2017, július 31.)
Programozási nyelv
  • C
  • OpenGL Shading Language
Operációs rendszerPlatformfüggetlen
KategóriaAPI
LicencVá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 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:

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)

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 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:

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

További információk