Mi az az OpenGL?
Az OpenGL egy szoftver-interfész, amelyet a grafikus hardverekhez készítettek. Ez az interfész kb. 120 különbözo parancsot tartalmaz, amelyeket interaktív háromdimenziós alkalmazások készítésére használhatunk. Az OpenGL-t úgy tervezték, hogy hálózatos környezetben lehessen használni. Az ügyfél gép (client) az, amely az OpenGL-alapú alkalmazást futtatja, a rajzoló parancsokat küldi. A kiszolgáló gép (server) pedig az, amely az elküldött parancsokat megkapja, végrehajtja a rajzolást és visszaküldi a megjeleníteni kívánt képet. A kiszolgáló és az ügyfél gép közötti adatátvitel (protokoll) elore definiált, így nem jelent problémát, ha a két számítógép különbözo operációs rendszerrel muködik. Ha egy OpenGL-alapú alkalmazás nem hálózaton fut, hanem egy számítógépen, akkor az egyszerre lesz ügyfél és kiszolgáló is. Az OpenGL-t modern, hardverfüggetlen interfésznek tervezték, azért, hogy bármely hardveren implementálni tudják. Ennek érdekében viszont le kellett mondani az ablakkezelo funkciókról, a kezelo felülethez kapcsolódó részekrol. Hasonló meggondolásokból az OpenGL nem tartalmaz olyan parancsokat, amelyek magasszintu háromdimenziós objektumok leírására szolgálnának. Természetesen van rá lehetoség, hogy olyan összetett alakzatokat definiáljunk, mint pl. egy autó, testrész, repülogép stb. Az alapkoncepció viszont az, hogy a kívánt modelleket kisszámú geometriai primitívbol építsük fel – pontokból, vonalakból és poligonokból. Az OpenGL lehetoségei:Egy peldán keresztul megismerjuk a parancsokat
Mivel az OpenGL-t igen sok mindenre lehet használni, egy OpenGL program igen bonyolult is lehet. Ám a program alapveto struktúrája nagyon egyszeru: eloször beállítunk bizonyos állapotokat, amelyek a megjeleníteni kívánt képek elkészítését vezérlik. Majd specifikáljuk a megjeleníteni kívánt objektumokat. Az alábbiakban egy OpenGL-alapú program részletét közöljük, amely egy fehér négyzetet rajzol ki a fekete háttérre:
glClearColor (0.0, 0.0, 0.0, 0.0);
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);
glOrtho (-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glBegin (GL_POLYGON);
glVertex2f (-0.5, -0.5);
glVertex2f (-0.5, 0.5);
glVertex2f (0.5, 0.5);
glVertex2f (0.5, -0.5);
glEnd ();
glFlush ();
Az OpenGl parancsok szintaxisa.
Ahogy a fenti programrészletbol kitunhetett, az OpenGL parancsok gl elotaggal kezdodnek és minden szó nagybetuvel kezdodik (pl. glClearColor). Hasonlóan az eloredefiniált konstansok GL - sal kezdodnek, nagybetukkel vannak írva, a szavak között aláhúzásjelet használnak (pl. GL_COLOR_BUFFER_BIT). Bizonyára az is feltunt, hogy néhány parancs nevében extra jelek találhatók (pl. 3f a glColor3f-ben). Ezzel az azonos függvények különbözo paraméterezéseit jelentik. A hármas azt jelzi, hogy három paramétert kívánunk átadni. Az f betu pedig azt, hogy lebegopontos számokat adunk meg paraméterként. Az alábbi táblázatban összefoglaltuk az ANSI C-beli numerikus típusokat és a megfelelo OpenGL adattípusokat:
Utótag | Adattípus | C-beli típus definíció | Megfelelő OpenGL típus |
b | 8-bites előjeles egész | signed char | GLbyte |
s | 16-bites előjeles egész | short | GLshort |
i | 32-bites előjeles egész | long | GLint, GLsizei |
f | 32-bites előjeles lebegőpontos szám | float | GLfloat, GLclampf |
d | 64-bites előjeles lebegőpontos szám | double | GLdouble, GLclampd |
ub | 8-bites előjel nélküli egész | unsigned char | GLubyte, GLboolean |
us | 16-bites előjel nélküli egész | unsigned short | GLushort |
ui | 32-bites előjel nélküli egész | unsigned long | GLuint, GLenum, GLbitfield |
glColor3f (1.0, 0.0, 0.0);
float color_array[] = {1.0, 0.0, 0.0}; glColor3fv (color_array);Az OpenGl mint állapot-automata.
Az OpenGL egy állapot-automata: változtatható állapotokkal (másképp mondva: módokkal) rendelkezik, amelyek a megváltoztatásukig fenntartják az állapotukat. Így a bevezeto példában látott aktuális szín is egy állapot-változó, hisz miután beállítjuk a színt, bármit is rajzolunk, az ezzel a színnel fog megjelenni – mindaddig, míg meg nem változtatjuk. Az aktuális szín egyike az OpenGL-ben megtalálható állapotváltozóknak. A többi olyan tevékenységeket vezérelnek, mint pl. a projekciós transzformációkat, a poligon rajzolási módokat, a lámpák pozícióját és karakterisztikáját, az objektumok anyagjellemzoit. Jónéhány állapotváltozó kétértéku: ki- és bekapcsolni lehet oket a glEnable() és a glDisable() függvényekkel. Minden állapotváltozónak van egy eloredefiniált kezdeti értéke. Természetesen, nemcsak beállítani lehet ezeket a változókat, hanem bármikor le is kérdezhetjük az aktuális értéküket. Jellemzo a következo négy függvény használata – attól függoen, hogy milyen típusú adatot szeretnék visszakapni: glGetBooleanv(), glGetDoublev(), glGetFloatv(), glGetIntegerv(). Vannak ezeknél speciálisabb lekérdezo függvények is, így pl. a glGetLightfv(). Gyakran lehet szükségünk arra, hogy az aktuális állapotokat lementsük, majd egy késobbi idopillanatban visszaállítsuk. Ezekre a glPushAttrib() és a glPopAttrib() parancsokat lehet használni.Az OpenGl és a Windows kapcsolata.
A Windows NT 3.5-ös verziójának megjelenése óta az OpenGL része az operációs rendszernek. A Microsoft a Windows 95-höz is már kihozta a megfelelo dll-eket, míg a Windows 98-be már „beépítve" szállítják.2002.10.06
szabo6@iit.uni-miskolc.hu