számítógépes grafika
Primitívek és az átalakulás OpenGL helyet egy példa a kocka rajz
Szigorúan véve, ha írunk egy programot OpenGL. Mi nem készít semmit. Bemutatjuk a modell egy jelenet, meg a tulajdonságait primitívek, amelyből minden más tárgyakat, és kezelni OpenGL államokban. Látványterv a modell foglalkozik OpenGL. információk alapján, hogy mi jelentett. A modern grafikus rendszerek zavarhatják a képalkotó folyamat segítségével shaderek. amely lehetővé teszi a program elég rugalmas és gyors grafikus alkalmazásokhoz.
OpenGL primitívek
Négyszög (Quad)
Bármely sokszög korlátozások érvényesek OpenGL. Először is, a sokszög legyen egyszerű. azaz nincs önálló kereszteződéseket. Másodszor, meg kell konvex. Egy konvex sokszög szegmens összekötő bármely két pont a két belső, nem lépi át a határain.



Minden primitívek OpenGL által meghatározott szerkezete a következő:
glBegin (GL_QUADS);
glVertex3f (-0.5f, -0.5f, 0.0f);
glVertex3f (-0.5f, 0,5F, 0.0f);
glVertex3f (0,5F, 0,5F, 0.0f);
glVertex3f (0,5F, -0.5f, 0.0f);
kéreg ();
A paraméter típusa továbbítjuk glBegin parancsot primitívek, amelyeket az alábbiakban ismertetünk parancsok között glBegin / kéreg. A megadott csúcsainak koordinátáit a primitív.
Megjegyzés: a parancs glVertex 3 f formátumban. Trojka azt jelenti, hogy a csapat eltelt három érv. Ebben az esetben, a koordinátákat a formátumban (x. Y. Z). Az aláírás f jelenti, hogy a paramétereket a csapatok típusú úszó.
felhívni a kocka
érvényteleníti DrawCube (GLfloat méret)
glBegin (GL_QUADS);
// bal arca
glVertex3f (-size / 2, -size / 2, -size / 2);
glVertex3f (-size / 2, mérete / 2, -size / 2);
glVertex3f (-size / 2, mérete / 2, méret / 2);
glVertex3f (-size / 2, -size / 2, mérete / 2);
// jobb szélén
glVertex3f (méret / 2, -size / 2, -size / 2);
glVertex3f (méret / 2, -size / 2, mérete / 2);
glVertex3f (méret / 2, mérete / 2, méret / 2);
glVertex3f (méret / 2, mérete / 2, -size / 2);
// az alsó korlát
glVertex3f (-size / 2, -size / 2, -size / 2);
glVertex3f (-size / 2, -size / 2, mérete / 2);
glVertex3f (méret / 2, -size / 2, mérete / 2);
glVertex3f (méret / 2, -size / 2, -size / 2);
// felső korlátja
glVertex3f (-size / 2, mérete / 2, -size / 2);
glVertex3f (-size / 2, mérete / 2, méret / 2);
glVertex3f (méret / 2, mérete / 2, méret / 2);
glVertex3f (méret / 2, mérete / 2, -size / 2);
// hátsó felülete
glVertex3f (-size / 2, -size / 2, -size / 2);
glVertex3f (méret / 2, -size / 2, -size / 2);
glVertex3f (méret / 2, mérete / 2, -size / 2);
glVertex3f (-size / 2, mérete / 2, -size / 2);
// homlokfelület
glVertex3f (-size / 2, -size / 2, mérete / 2);
glVertex3f (méret / 2, -size / 2, mérete / 2);
glVertex3f (méret / 2, mérete / 2, méret / 2);
glVertex3f (-size / 2, mérete / 2, méret / 2);
kéreg ();
>
Kb. Ebben a példában csak a geometria mintájára kocka. A megfelelő világítás és textúraleképezéseket minden arcát annak szükségességét, hogy további tulajdonságai: a normál és textúra koordinátákat.
affin transzformációk
A cikk „affin transzformációk a térben” vették figyelembe részletesen affin transzformáció a teret. Lássuk, hogyan vannak jelen OpenGL.
Kb. A cikk nem foglalkozik a kombinációja affin transzformációk. Ezt részletesen a következő cikkben.
Affin transzformáció OpenGL
A megoldás erre a problémára az, hogy forgassa a koordináta-rendszer fordított irányban után újrarajzolás:
glClear (GL_COLOR_BUFFER_BIT); // Töröljük a framebuffer
glRotatef (30,0 f 1,0 f 1.0 f 1.0 f ...); // Forgatás 30 fok körül a vektor (1, 1, 1)
glColor3f (0.7f, 0.25f, 0.55f); // Az aktuális szín primitívek
glutWireCube (1.0f); // rajzolhatunk vezetéket kocka oldala 2
glRotatef (- 30,0 f 1,0 f 1.0 f 1.0 f ...); / / Forgatás -30 fok körül a vektor (1, 1, 1)
Ennek a megközelítésnek számos hátránya van:
- párhuzamos kódot: korrigálására paramétereinek közvetlen átalakítása szükséges kijavítani őket fordított;
- pontatlan: az átalakítási folyamat során halmozódhatnak kisebb hibák, amelyek, ha ismételt átrajzolhatja látható;
Ez a probléma könnyen megoldható, ha elvégzése előtt átalakulások emlékszik a jelenlegi helyi koordináta-rendszer, majd felhívni pontosan helyreállítani. Ez történik egy pár glPushMatrix / glPopMatrix csapatok. Mit jelent a mátrix lesz szó a következő cikkben. A végső kód a következőképpen néz ki.
glClear (GL_COLOR_BUFFER_BIT); // Töröljük a framebuffer
glPushMatrix (); // emlékszik lokális koordinátarendszer
glRotatef (30,0 f 1,0 f 1.0 f 1.0 f ...); // Forgatás 30 fok körül a vektor (1, 1, 1)
glColor3f (0.7f, 0.25f, 0.55f); // Az aktuális szín primitívek
glutWireCube (1.0f); // rajzolhatunk vezetéket kocka oldala 2
glPopMatrix (); // helyreállítani a helyi koordinátarendszer