Vertex, Vertices

Ein Vertex ist ein Punkt um 3-dimensionalen Raum. Mithilfe einzelner Vertices lassen sich einfache Strukturen wie Rechtecke, Dreiecke oder Linien basteln. Zur Übermittlung der Vertex-Daten liefert OpenGL die Funktion glVertex3f mit (OpenGL Funktionsnamen-Hinweise). Generell sind (fast) alle Objekte aus Vertices aufgebaut. OpenGL muss allerdings bevor die Vertex-Daten übersandt werden wissen, um welches Objekt es sich handelt, was gezeichnet werden soll.

So sah der Beispielcode im GLUT-Testprogramm aus:

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

glColor3f() legt die Farbe der nächst zu zeichnenden Vertices fest. Lediglich ein erneutes Aufrufen von glColor3f() wird die Farbe ändern. glColor3f werden der rote, der grüne und der blaue Farbanteil (in der Reihenfolge) von 0 bis 1 übergeben.
glBegin() legt den Typ des Objektes fest, was zwischen diesem glBegin() und dem nächsten glEnd() zu zeichnen ist. Die untenstehende Tabelle soll illustrieren, was an elementaren Strukturen möglich ist.
glVertex3f() übermittelt die Vertex-Daten an die Grafikkarte. Dort werden sie gezeichnet und sofort wieder verworfen. Die Daten werden bei jedem Funktionsdurchlauf an die Grafikkarte gesendet, eine Speicherung auf der Grafikkarte findet hier nicht statt!
glEnd() beendet den Zeichenblock.

glBegin()-Parameter Art des Objekts
GL_POINTS Die Vertices werden als Punkte gezeichnet
GL_LINES Zwei aufeinanderfolgende Vertice werden zu einer Linie verbunden (jeweils 1-2; 3-4)
GL_LINE_STRIP aufeinanderfolgende Vertice werden zu einer einzigen Linie verbunden (1-2-3-4)
GL_LINE_LOOP aufeinanderfolge Vertice werden zu einer einzigen Linie verbunden und das erste wird mit dem letzten verbunden (1-2-3-4-1)
GL_POLYGON aus Dreiecken aufgebaute Fläche; wichtig ist, dass alle Vertice in einer Ebene liegen
GL_QUAD_STRIP Vierecke werden jeweils verbunden (Vertices werden dabei Kantenweise übergeben)
GL_QUADS Vertices werden zu einzelnen Vierecken verbunden; dabei sollten für die richtige Orientierung der Vierecke die Vertices jeweils gegen den Uhrzeigersinn angegeben werden
GL_TRIANGLES Vertices werden zu einzelnen Dreiecken verbunden
GL_TRINAGLES_STRIP Vertices werden zu Dreiecken verbunden, dabei sind die letzten 2 Punkte des vorherigen Dreiecks die ersten zwei für das nächste.
GL_TRIANGLE_FAN Vertices werden zu Dreiecken verbunden; der erste Punkt ist Punkt jeden Dreiecks

Es ist innerhalb eines glBegin-Blockes nicht möglich die Art des Objektes zu ändern, allerdings ist es möglich mehrere Objekte hintereinander zu zeichnen. Folgendes wäre für zwei Vierecke also durchaus denkbar (und angebracht):

glColor3f( 0.8, 0.0, 0.0 );
glBegin( GL_QUADS );
  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 );
 
  glVertex3f( 0.8, 0.25, 0.0 );
  glVertex3f( 1.3, 0.25, 0.0 );
  glVertex3f( 1.3, 0.75, 0.0 );
  glVertex3f( 0.8, 0.75, 0.0 );
glEnd();

Im Übrigen sind die Vierecke nun rot. Für die Beleuchtung der gezeichneten Objekte ist es wichtig in welcher Reihenfolge die Vertices gezeichnet werden. OpenGL erwartet in der Standard-Einstellung, dass Sie die Vertices gegen den Uhrzeigersinn angeben (counter-clock-wise).