Munka OpenGL használatával jóllakottság
Mint már tudjuk, OpenGL egy multi-platform könyvtár írt szoftvert használ OpenGL könnyen átvihető egy másik operációs rendszer, míg megszerzése ugyanolyan vizuális eredményt. Az egyetlen dolog, ami rossz -, hogy egy adott operációs rendszer szorulnak a OpenGL konfiguráció. Azaz tegyük írsz OpenGL szoftver Windows és szeretné mozgatni, hogy a Linux, OpenGL kódot kell szállítani, minden probléma nélkül, de műveletek Windows kezelőfelületet műveletek I / O eszközök kell átírni már másik operációs rendszer alatt - Linux .
Szerencsére, van egy speciális multi-platform könyvtár, amely lehetővé teszi, hogy megoldja a problémákat, a fent leírt. És a neve ennek a könyvtár - GLUT.
Először is, meg kell tanulni a legalapvetőbb - a létrehozása egy ablak, amelyben lehetséges lesz, hogy dolgozzon OpenGL. Minimum program, amely létrehoz egy ablakot, és valami felhívja áll a következő lépéseket:
Beállítás ablak paramétereit.
A funkciók beállításához kidolgozásáért felelős egy ablakban, és változtatni az alakját az ablakon.
Így úgy véljük, minden 5 pont részletesebben:
1. GLUT inicializálás történik:
void glutInit (int * argcp, char ** argv);
Az első paraméter egy mutató az argumentumok száma a parancssorban, és a második - mutató tömb érveket. Jellemzően ezek az értékek venni a főbb jellemzői a program: int main (int argc, char * argv []).
2. Állítsa be a paramétereket az ablak tartalmaz több szakaszban. Először is, meg kell adnia az ablak méretét:
void glutInitWindowSize (int szélesség, int magasság);
Az első paraméter szélesség - a szélessége az ablak pixel, a második magasság - a magassága az ablak pixel. Azt is megjegyzik, hogy ha kihagyja ezt a parancsot, a GLUT lesz a méret az alapértelmezett ablak, általában 300x300.
Ezután megadhatja az ablak pozícióját jön létre viszonyítva a bal felső sarokban. Ez történt:
void glutInitWindowPosition (int x, int y);
Azt is meg kell beállítani az ablak megjelenítési módot. Ie Az ablak paraméterek, mint: színes modell, a számos különböző pufferek, stb Ehhez van GLUT parancsot:
void glutInitDisplayMode (unsigned int mód);
A csapatnak csak egy paraméter, amely egyike képviseli a következő konstansok, vagy ezek kombinációja állandók a bitenkénti OR.
Nyissa ki az ablakot teljes képernyőre. Ugyanakkor eltűnik a képernyőről ablak címét, és a fennmaradó részek kivételével az ablak tartalmának, azaz az alkalmazás lesz teljes képernyős.
Van egy másik érdekes tulajdonsága, hogy lehetővé teszi, hogy a kurzort az ablak alakja:
void glutSetCursor (int kurzor);
kurzor paraméter vehet az alábbi értékeket: GLUT_CURSOR_RIGHT_ARROW, GLUT_CURSOR_LEFT_ARROW, GLUT_CURSOR_INFO, GLUT_CURSOR_DESTROY, GLUT_CURSOR_HELP, GLUT_CURSOR_CYCLE, GLUT_CURSOR_SPRAY, GLUT_CURSOR_WAIT, GLUT_CURSOR_TEXT, GLUT_CURSOR_CROSSHAIR, GLUT_CURSOR_UP_DOWN, GLUT_CURSOR_LEFT_RIGHT, GLUT_CURSOR_TOP_SIDE, GLUT_CURSOR_BOTTOM_SIDE, GLUT_CURSOR_LEFT_SIDE, GLUT_CURSOR_RIGHT_SIDE, GLUT_CURSOR_TOP_LEFT_CORNER, GLUT_CURSOR_TOP_RIGHT_CORNER, GLUT_CURSOR_BOTTOM_RIGHT_CORNER, GLUT_CURSOR_BOTTOM_LEFT_CORNER, GLUT_CURSOR_INHERIT , GLUT_CURSOR_NONE, GLUT_CURSOR_FULL_CROSSHAIR.
Van egy speciális módja a GLUT, amely lehetővé teszi, hogy a játék mód a OpenGL program azaz ha az alkalmazás a teljes képernyőt elfoglalja.
Ehhez GLUT vannak speciális parancsokat, hogy ellenőrizzék ezt a módot.
void glutGameModeString (const char * string);
Ez a funkció határozza meg a paramétereket beállítani a képernyő felbontás, színmélység és frissítési gyakoriság (Hz-ben). bemeneti paraméter formátuma:
Például: glutGameModeString ( "640x480: 16 @ 72"); - Azt jelenti, hogy kiválassza a képernyő felbontása 640 x 480 pixel, színmélység 16 bit és a frissítési arány 72 hertz.
Hogy megy a játék mód módban kell hívni a funkciót:
És hogy ki a játék mód módban kell hívni a funkciót:
Nos, hogy egyértelműbb legyen itt egy példa segítségével ezt az üzemmódot:
Teljes forráskód a program lehet venni itt: game_mode.zip
Azt is megjegyzik, hogy akkor hívja a funkciót glutGameModeString így:
Ie meghatározása nélkül a frissítési gyakoriságot. Itt GLUT maga választja ki a megfelelő frekvenciát.
Ebben a cikkben lesz szó, hogy a kölcsönhatás az OpenGL program és a GLUT.
A legelső jelentősége (ami nélkül nem tud semmilyen program) függvény felelős újrarajzolás az ablak tartalmának:
érvényteleníti glutDisplayFunc (void (* func) (void));
Ez a funkció beállítja a funkciót a program, amely felelős újrarajzoláskor az ablakot. Ez biztosítja, hogy ha a rendszernek szüksége van, hogy dolgozza át az ablakon (például, ha ki az összecsukott állapotban hajtogatás doboz), akkor okozhat a megfelelő funkciót a program, amely felelős újrarajzolás tartalmát az ablakon. Ez az ablak Újrarajzolás kerül meghívásra, ha az első alkalommal futtatja az alkalmazást. Megjegyzem, hogy ha teremtsen GLUT, majd meghatározza a funkció az ablak Újrarajzolás szükséges! Másrészt, te magad is okozhat a rendszerben, hogy dolgozza át az ablakot, szükség például akkor, ha változtatni az állam tárgyak, vagy módosítsa a megjelenését, akkor kell, hogy dolgozza át a tartalmát az ablak megjelenítéséhez a változásokat. Ezért van egy speciális GLUT glutPostRedisplay () függvényt. amelynek hatására a rendszer, hogy dolgozza át az aktuális ablakot. Ha hirtelen szeretné, hogy dolgozza át a jelenlegi ablak nem, mint mások, a következő funkciók állnak rendelkezésre: glutPostWindowRedisplay (int nyerni). Ez újra rajzolja ablak tartalmának nyer.
void glutReshapeFunc (void (* func) (int szélesség, int magasság));
Mint már említettük, ez a funkció beállítja a másik funkciója a program, amely felelős az átméretezés az ablakot. Ha az ablakot megváltozott mérete, szükséges, hogy újjáépítsék a kimeneti grafikus információk már egy új ablakban a másik dimenzióban. Ehhez a funkció (azaz a funkciót a program) eltelt 2 paraméterek szélesség és magasság. azaz szélessége és magassága a módosított ablakot. Általában az elején a funkciót, a funkció glViewport. mint például: glViewport (0, 0, szélesség, magasság). újjáépíteni a kimenő képet már egy doboz más dimenziók.
A másik nagy funkció, amely meghatározza a funkciót a program, amely lehet nevezni, amikor a rendszer, ha az ablak láthatóvá válik, vagy fordítva, hogy láthatatlanná válik.
érvényteleníti glutVisibilityFunc (void (* func) (int állam));
Az egyetlen paraméter, amely továbbítja a hívott rendszer funkció: állapot. Ha összehasonlítjuk ezt a paramétert az állandók és GLUT_NOT_VISIBLE GLUT_VISIBLE tudja dönteni, mi történt az ablakot, vagy azt, hogy láthatatlanná válik, vagy fordítva - látható.
érvényteleníti glutIdleFunc (void (* func) (void));
Egy függvény, amely meghatározza a funkciót a program, amely lehet nevezni a rendszer minden alkalommal az alkalmazás tétlen, azaz Ez nem semmi. Gyakran ez a funkció használható az animációt.
Nos, az utolsó pont, ami figyelembe vesszük:
érvényteleníti glutTimerFunc (unsigned int Millis, void (* func) (int érték), int-érték);
Ez a funkció beállítja az időzítőt. Millis első paraméter meghatározza azt az időtartamot ezredmásodpercben, amely időpontban a függvény neve, amely tartalmazza, mint a második paramétert. A harmadik paraméter értéke azt jelzi, az azonosító egy időzítő, azaz Időzítők lehet egyszerre futó több. Ugyanez az érték létezik az érték a függvény, amely az úgynevezett időzítőt. Erre azért van szükség annak érdekében, hogy meghatározza, mely időzítő elindul, azaz Ha a funkció kezeli a több időzítő.
Következő, adok a példa egy kis program, amely felhívja a forgó vonalon. Forráskód lehet venni, és innen: animation.zip
Megpróbálja minimalizálni az ablakot, majd lebontja, és nézd meg a konzolt, működött-re eljárást.
[Hiba történt a feldolgozás ezen irányelv]
[Hiba történt a feldolgozás ezen irányelv]