void
glBegin( enum mode );
void glEnd( void );
A glBegin parancsnak a következõ argumentumai lehetnek: POINTS, LINE_STRIP, LINE_LOOP, LINES, POLYGON, TRIANGLE_STRIP, TRIANGLE_FAN, TRIANGLES, QUAD_STRIP, QUADS, attól függõen, hogy milyen geometriai objektumot specifikálunk.
POINTS(pontok): független pontok specifikálása.
pl.:
glBegin(GL_LINES);
glColor3d(1.0,0.0,0.0);
glVertex3d(0.5,0.5,0.0);
glEnd();
egy piros pontot rajzol a (0.5,0.5,0.0) koordinátákba
LINE_STRIP (szakasz sorozat): egy vagy
több összekötött szakasz specifikálása
a végpontok sorozatának megadásával.
Az elsõ vertex specifikálja az elsõ szakasz kezdõpontját,
a második vertex az elsõ szakasz végpontját,
és a második szakasz
kezdõpontját, ...
Egy szakasz sztrip három vertexszel
pl.: az ábrán látható szakasz sorozat specifikálása:
glBegin(GL_LINE_STRIP);
glVertex3d(0,0,0);
glVertex3d(50,50,0);
glVertex3d(50,100,0);
glEnd();
LINE_LOOP (szakasz hurkok): ugyanaz, mint a LINE_STRIP, de az utolsóként specifikált vertexet összekötjük az elsõként specifikált vertexszel.
Egy szakasz hurok három vertexszel
pl.: az elõzõ példa, azzal a különbséggel, hogy az elsõ pont össze van kötve az utolsóval
glBegin(GL_LINE_STRIP);
glVertex3d(0,0,0);
glVertex3d(50,50,0);
glVertex3d(50,100,0);
glEnd();
LINES (független szakaszok): az elsõként
specifikált két vertex határozza meg az elsõ
szakaszt, a második két vertex a
második szakaszt,.... Ebben az esetben, ha páratlan számú
vertexet specifikálunk a glBegin/glEnd
pár között, akkor az utolsóként specifikált
vertexet az OpenGL nem veszi figyelembe.
POLYGON (sokszögek): polygonokat úgy
specifikálhatunk, ha specifikáljuk a határvonalát
szakaszok sorozataként,
ugyanúgy, mint a LINE_LOOP-nál. Figyelem: az OpenGL csak
konvex sokszögek helyes kirajzolását garantálja
(konkáv sokszögeket tudunk pl. úgy rajzolni, hogy felbontjuk
konvex sokszögekre).
TRIANGLE_STRIP (háromszög
sorozat): háromszögek sorozata közös oldalakkal.
Ebben az esetben az elsõ három vertex specifikálja
az elsõ háromszöget, minden további vertex egy
további háromszöget specifikál úgy, hogy
a másik két vertex az elõzõ háromszögbõl
származik. Ezt a mûveletet a Gl úgy végzi, hogy
mindig eltárol két vertexet, az A és B vertexet, és
egy bit mutatót, amely jelzi, hogy melyik eltárolt vertex
helyettesítõdik az új vertexszel. A glBegin(TRIANGLE_STRIP)
hívás után a mutató az A vertexre mutat, minden
további vertex átkapcsolja a mutatót, így az
elsõ vertex A vertexként, a második vertex B
vertexként, a harmadik A vertexként, ... van tárolva.
Minden vertex, a harmadiktól kezdve, egy háromszöget
specifikál az A és
B vertexszel.
1. ábra
háromszög sztrip
TRIANGLE_FAN (háromszög
legyezõ): majdnem ugyanaz, mint a háromszög sorozat,
azzal a kivétellel, hogy a két vertex közül az
A vertex mindig az elsõként specifikált vertex, az
összes többi pedig helyettesíti a B vertexet.
2. ábra
TRIANGLE_FAN
TRIANGLES (független háromszögek):
Minden i-re, a 3i+1-ik, 3i+2-ik illetve 3i+3-ik vertex határoz meg
egy háromszöget,
ahol i = 0,1,2,...
3. ábra
független háromszögek
QUAD_STRIP (négyszög sorozat): párhuzamos oldalakkal rendelkezõ téglalapokat hoz létre. Ha a specifikált vertexek: v1, v2, ..., vm, ahol vj a j-dikként specifikált vertex, akkor az i-dik négyszög vertexei(sorban) v2i, v2i+1, v2i+2, v2i+3, ahol i = 0,1,..., [m/2]
QUADS (független négyszögek):minden négy vertexbõl álló csoport egy független négyszöget specifikál. A 4j+1-ik, 4j+2-ik, 4j+3-ik és 4j+4-ik vertex specifikál egy négyszöget, minden j = 0, 1, 2, ...-re.
pl.: a
glBegin(GL_TRIANGLES);
glVertex3d(0.0, 0.0, 0.0);
glVertex3d(0.0, 0.8, 0.0);
glVertex3d(0.7, 0.4, 0.0);
glEnd();
egy olyan háromszöget specifikál, mely csúcsai
a (0.0, 0.0, 0.0), (0.0, 0.8, 0.0) és (0.7, 0.4, 0.0) pontokban
vannak.