OpenGL Primitive

Mit OpenGL werden alle geometrischen Objekte schließlich als eine Anordnung von Eckpunkten beschrieben. Man benutzt den glVertex*() Befehl um einen Eckpunkt festzulegen. Man kann bis zu vier Koordinaten (x, y, z, w) für einen speziellen Eckpunkt liefern oder so wenig wie zwei (x, y) durch die Auswahl der geeigneten Version des Befehls. Wenn man eine Version benutzt, die nicht ausdrücklich z oder w spezifiziert, wird z als gleich 0 und w als gleich 1 verstanden. Aufrufe an glVertex*() sind nur zwischen einem glBegin() und glEnd() Paar wirksam.

Da Sie nun gesehen haben wie Eckpunkte festgelegt werden, müssen Sie trotzdem wissen, wie OpenGL mitgeteilt wird, eine Gruppe von Punkten, eine Linie oder ein Polygon von diesen Eckpunkten zu erzeugen. Um dies zu tun, Klammern Sie jede Gruppe von Eckpunkten zwischen einem Aufruf an glBegin() und einem Aufruf an glEnd() ein. Das Argument, das an glBegin() übergeben wird, entscheidet welche Art von geometrischer Primitive aus den Eckpunkten konstruiert wird. Zum Beispiel legen die folgenden Eckpunkte ein gefülltes Polygon fest:

glBegin (GL_POLYGON);
glVertex2f(0.0, 0.0);
glVertex2f(0.0, 3.0);
glVertex2f(4.0, 3.0);
glVertex2f(6.0, 1.5);
glVertex2f(4.0, 0.0);
glEnd ();

GL_POINTS, GL_LINES, GL_LINE_STRIP, ...

Wenn Sie GL_POINTS anstatt GL_POLYGON benutzt hätten, wäre die Primitive einfach fünf Punkte gewesen. Die folgende Zusammenfassung für glBegin() listet die zehn möglichen Argumente und die entsprechenden Typen von Primitiven auf.

Tabelle 18-2. Argumente für glBegin()

Wert Bedeutung
GL_POINTS einzelne Punkte
GL_LINES jeweils zwei Eckpunkte als einzelne Liniensegmente interpretiert
GL_LINE_STRIP Folge von verbundenen Liniensegmenten
GL_LINE_LOOP wie oben, mit einem zusätzlichen Segment zwischen letzten und ersten Eckpunkten
GL_TRIANGLES jeweils drei Eckpunkte als Dreieck interpretiert
GL_TRIANGLE_STRIP zusammenhängender Streifen von Dreiecken
GL_TRIANGLE_FAN zusammenhängender Fächer von Dreiecken
GL_QUADS jeweils vier Eckpunkte als vierseitiges Polygon interpretiert
GL_QUAD_STRIP zusammenhängender Streifen von Vierecken
GL_POLYGON Grenze eines einfachen, konvexen Polygons

Die wichtigste Information über Eckpunkte sind ihre Koordinaten, welche durch den glVertex*() Befehl festgelegt werden. Man kann zusätzliche, eckpunktspezifische Daten für jeden Eckpunkt liefern - eine Farbe, ein Normalvektor, Texturkoordinaten, oder jede Kombination - durch Benutzung spezieller Befehle. Außerdem sind einige andere Befehle zwischen einem glBegin() und glEnd() Paar gültig.

Tabelle 18-3. gültige Befehle zwischen glBegin() und glEnd()

Befehl Zweck des Befehls
glVertex*() Definition von Eckpunkten
glColor*() Definition von Farben
glIndex*() Definition von Farbindizes
glNormal*() Definition von Normalvektor Koordinaten
glTexCoord*() Definition und Generierung von Texturkoordinaten
glEdgeFlag*() Steuerung des Zeichnen von Ecken/Kanten
glMaterial*() Definition der Materialeigenschaften
glArrayElement() Extrahiert Eckpunktdaten
glEvalCoord*(), glEvalPoint*() Definition und Generierung von Koordinaten
glCallList(), glCallLists() Ausführen von Displaylisten