Ein Vertex (Plural ist Vertices) ist einfach ausgedrückt ein Eckpunkt und deren Farbe eines Polygons. Ein Rechteck (= Polygon) besteht also z.B. aus vier Vertices.
Ein Vertex-Array ist also ein Array* von Vertices.
Der Vertex Buffer ist einfach ausgedrückt ein Zwischenspeicher für Vertex-Arrays innerhalb des Grafikspeichers.
Angenommen, wir wollen ein Haus zeichnen. Es wäre ja ziemlich unsinnig, dieses Haus mittels Programmcode zu zeichnen, was ja durchaus möglich ist.
Für ein einfaches Beispiel nehme ich aber ein Dreieck mit folgenden Punkten:
Das ist jetzt Pseudo-Code und er würde einfacherweise Dreieck zeichnen.
Per Vertex-Array haben wir die Möglichkeit die Eckpunkte vom Dreieck einmal festzulegen, und können sie dann zeichnen. Beispiel:
Um es mal ganz simpel zu halten.
Das Problem ist ja, dass man jedes Polygon bei jedem Aufruf des Loops** neu berechnen muss. Das kann bei sehr komplexen Polygonen sehr unperformant werden, weil man jedes Mal die Zeichnen-Routine aufruft (oberer Pseudo-Code). Auch führt dies nicht grad zu einem wartbaren Code, wenn da zig tausend Mal die Zeichne()-Funktion aufgerufen wird. Um diese Inperformanz zu minimieren und den Code schlanker zu machen, kann man diese Polygone als Vertex Buffer Object (VBO) im Grafikspeicher hinterlegen, damit diese nicht immer per Zeichnen-Routine und Programmcode berechnet werden müssen (unterer Pseudo-Code).
Ich hoffe, das war verständlich genug.
---
* Ein Array kannst du dir wie ein Paket vorstellen. In dieses Paket legt man z.B. Bücher rein. Jedes Buch repräsentiert dann die Daten, auf die man dann innerhalb des Pakets zugreifen kann.
** Der sog. Loop (= Schleife) ist für Grafikanwendungen essentiell. Innerhalb eines Schleifendurchgangs wird die Eingabe verarbeitet, die Logik berechnet und die Ausgabe generiert. Wenn ein Spiel z.B. mit 60 FPS läuft, durchläuft das Spiel also 60 Mal diese Schleife.