Was sind Vertex-Array-Objekte?

Ich fange gerade erst an, OpenGL aus diesem Tutorial zu lernen:http://openglbook.com/the-book/
Ich komme zu Kapitel 2, wo ich ein Dreieck zeichne und alles außer VAOs verstehe (ist dieses Akronym in Ordnung?). Das Tutorial hat diesen Code:

glGenVertexArrays(1, &VaoId);
glBindVertexArray(VaoId);

Obwohl ich verstehe, dass der Code notwendig ist, habe ich keine Ahnung, was er tut. Obwohl ich VaoId nach diesem Punkt nie mehr verwende (außer um es zu zerstören), funktioniert der Code ohne diesen Punkt nicht. Ich gehe davon aus, dass dies daran liegt, dass es gebunden sein muss, aber ich weiß nicht warum. Muss dieser genaue Code nur Teil jedes OpenGL-Programms sein? Das Tutorial erklärt VAOs als:

Ein Vertex Array Object (oder VAO) ist ein Objekt, das beschreibt, wie die Vertex-Attribute in einem Vertex Buffer Object (oder VBO) gespeichert werden. Dies bedeutet, dass der VAO nicht das eigentliche Objekt ist, das die Eckendaten speichert, sondern der Deskriptor der Eckendaten. Vertex-Attribute können mit der Funktion glVertexAttribPointer und den beiden Schwesterfunktionen glVertexAttribIPointer und glVertexAttribLPointer beschrieben werden.

Ich verstehe nicht, wie die VAO die Eckpunktattribute beschreibt. Ich habe sie in keiner Weise beschrieben. Erhält es die Informationen vom glVertexAttribPointer? Ich denke das muss es sein. Ist die VAO lediglich ein Ziel für die Informationen von glVertexAttribPointer?

Ist das Tutorial, das ich verfolge, akzeptabel? Gibt es etwas, auf das ich achten sollte, oder ein besseres Tutorial, das ich befolgen sollte?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage