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 (); |
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 |