OpenGL példák

alapfogalmak

Kezdeni, hogy néhány meghatározást. Rendering - a folyamatot. amellyel a számítógép teremt a tárgyak képét. Tárgyak áll geometriai primitívek - pont. vonalak. hulladéklerakók. amelyek által meghatározott csúcsokat. Pixel - a legkisebb elemi vizuális kijelző elem. Pixel információ tárolásra kerül a memóriában formájában bitplane - területeken. ahol elkülönített 1 bit minden egyes pixel. Bitplanes szervezett framebuffert. Vegyünk egy egyszerű példát -, hogyan kell felhívni a fehér téglalap fekete alapon:
fő () glClearColor (0,0, 0,0, 0,0, 0,0);
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1,0, 1,0, 1,0);
glOrtho (0.0, 1.0, 0.0, 1.0, -1.0, 1,0);
glBegin (GL_POLYGON);
glVertex3f (0,25, 0,25, 0,0);
glVertex3f (0,75, 0,25, 0,0);
glVertex3f (0,75, 0,75, 0,0);
glVertex3f (0,25, 0,75, 0,0);
kéreg ();
glFlush ();
>
glClearColor () beállítja a fekete háttér. glClear () törli a háttérben. A jövőben. minden alkalommal. amikor glClear () kerül meghívásra. akkor törölje az ablak fekete színben. glColor3f () beállítja a rajzolási szín - fehér. glOrtho () határozza meg a koordináta rendszerben. glBegin () és kéreg () objektum meghatározzuk. amely lehet levonni. glVertex3f () definiálja a sokszög csúcsait. paraméterként - 3 koordinátái x, y, z. glFlush () biztosítja számunkra. hogy poligon rajz kerül azonnal végrehajtható. Minden OpenGL parancs előtaggal kezdődnek gl. Minden állandók, és kezdődik az előtag GL_. Például. A glColor3f () parancs a 3. számú mondja. 3. hogy a koordinátákat és az előtag „f” sugallja. ez az érv egy lebegőpontos. Általában. OpenGL, van 8 adat típusa B ASIC típusú. 1. 8-bites egész 2. 16-bites egész 3. 32-bites egész 4. 32-bites lebegőpontos 5. 64-bites lebegőpontos 6. 8-bites előjel nélküli egész 7. 16-bites előjel nélküli egész 8. 32-bites előjel nélküli egész So. 2 csapat glVertex2i (1, 3) és a glVertex2f (1,0, 3,0) valójában egyenértékű. bár különböző. Egyes csapatok elmerülő utolsó karaktere „v”. jelezve, hogy a vektor. Például. glColor3f (1,0, 0,0, 0,0); GLfloat color_array [] =; glColor3fv (color_array); Itt határozzuk meg a tömböt, és így a vektor mutatót. Hozzáférés a tömb által meghatározott egy gyakran használt GLvoid () parancsot. Amint a szín használatával glColor3f (). minden későbbi tárgyak jelennek meg a megadott színnel. Még nem váltunk vissza. Között az alapvető fogalmak jelenlegi megtekintésére. vetítési transzformációk, vonal. sokszög pontozófestés minták, sokszög rajz mód, pixel-csomagoló egyezmények, pozícióját és jellemzőit fények, anyagtulajdonságok. Hozzáférés a változók alkalmazásával hajtható végre glEnable () vagy glDisable (). glGetBooleanv funkció (), glGetDoublev (), glGetFloatv (), glGetIntegerv (), glGetPointerv (), glIsEnabled () - beállítása az adatok típusát. glPushAttrib () és glPushClientAttrib () meg van írva a verem. glPopAttrib () és glPopClientAttrib () csökken. OpenGL nagyon jól szervezett szempontjából a műveletek sorrendjét. GLUT általában. minden OpenGL-forrás cím 2 Fejléc. #include #include használata esetén GLUT is jelzi. A GLUT könyvtár integrált interfész az operációs rendszer API szinten. GLUT ajánlott a kezdeti szakaszában tanuló OpenGL. Ablakkezelés. · GlutInit (int * argc, char ** argv) - a legelső inicializáló parancs · glutInitDisplayMode (unsigned int mode) - beállítja a színt modell - RGBA vagy szín-index. Például. glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) - létrehozza a buffer. RGB modell. · GlutInitWindowPosition (int x, int y) - származásának megállapítására az ablak · glutInitWindowSize (int szélesség, int méret) - az ablak méretét · int glutCreateWindow (char * string) - létrehoz egy ablakot - glutDisplayFunc () - nevezzük, amikor egy ablak átalakul. - glutMainLoop (void) - ez a funkció meghívása után a többiek. Egy kis példa. #include
#include

void kijelző (void)
<
/ * * Erase /
glClear (GL_COLOR_BUFFER_BIT);

/ * Rajzolj egy fehér téglalap
* (0,25, 0,25, 0,0), és (0,75, 0,75, 0,0)
* /
glColor3f (1,0, 1,0, 1,0);
glBegin (GL_POLYGON);
glVertex3f (0,25, 0,25, 0,0);
glVertex3f (0,75, 0,25, 0,0);
glVertex3f (0,75, 0,75, 0,0);
glVertex3f (0,25, 0,75, 0,0);
kéreg ();

void init (void)
<
/ * Állítsa be a fekete háttér * /
glClearColor (0,0, 0,0, 0,0, 0,0);

/ * Inicializálása megtekintés értékek * /
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glOrtho (0.0, 1.0, 0.0, 1.0, -1.0, 1,0);
>

/ *
Határozza meg a paramétereket az ablakon. megjelenítési mód
* (Single-puffer és RGBA). Nyissa ki az ablakot a kifejezést „hello”
* A címben bar.
* /
int main (int argc, char ** argv)
<
glutInit (argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow ( "helló");
init ();
glutDisplayFunc (display);
glutMainLoop ();
vissza 0; / * ISO C megköveteli fő visszatérni int. * /
>

A GLUT beágyazott rajz háromdimenziós tárgyakat. kúp ikozaéder teáskanna Cube oktaéder tetraéder Dodekaéder gömb tórusz Az alábbi példa mutatja a munka glutSwapBuffers () parancsot. így a swap-pufferben. Vannak 2 pufferben. és még sem jelenik meg teljesen az egyiket. A második teljesen a színfalak mögött. és átfedi az egyik a másikat. Dupla pufferolt Program: double.c #include
#include
#include
#include

statikus GLfloat centrifugálás = 0,0;

void init (void)
<
glClearColor (0,0, 0,0, 0,0, 0,0);
glShadeModel (GL_FLAT);
>

void kijelző (void)
<
glClear (GL_COLOR_BUFFER_BIT);
glPushMatrix ();
glRotatef (spin, 0,0, 0,0, 1,0);
glColor3f (1,0, 1,0, 1,0);
glRectf (-25,0, -25,0, 25,0, 25,0);
glPopMatrix ();
glutSwapBuffers ();
>

void spinDisplay (void)
<
centrifugálás = centrifugálás + 2,0;
ha (spin> 360,0)
centrifugálás = spin - 360,0;
glutPostRedisplay ();
>

void alakíts (int w, int h)
<
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glOrtho (-50.0, 50,0, -50.0, 50,0, -1,0, 1,0);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();
>

void egér (int gombot, int állapotban, int x, int y)
<
kapcsoló (gomb) <
ügy GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN)
glutIdleFunc (spinDisplay);
break;
ügy GLUT_MIDDLE_BUTTON:
if (state == GLUT_DOWN)
glutIdleFunc (NULL);
break;
alapértelmezett:
break;
>
>

/ *
* Dupla buffer megjelenítési módot.
* Regisztráció egér beviteli callback függvények
* /
int main (int argc, char ** argv)
<
glutInit (argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv [0]);
init ();
glutDisplayFunc (display);
glutReshapeFunc (alakíts);
glutMouseFunc (egér);
glutMainLoop ();
vissza 0;
>

Kapcsolódó cikkek