====== 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 ([[frameworks:opengl:functionnames|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).