O que são objetos de array Vertex?

Eu estou apenas começando a aprender o OpenGL hoje a partir deste tutorial:http://openglbook.com/the-book/
Cheguei ao capítulo 2, onde desenho um triângulo e entendo tudo, exceto VAOs (é este acrônimo OK?). O tutorial tem este código:

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

Embora eu entenda que o código é necessário, não tenho ideia do que ele faz. Embora eu nunca use VaoId além desse ponto (exceto para destruí-lo), o código não funciona sem ele. Estou assumindo que isso é porque é necessário estar vinculado, mas não sei por quê. Esse código exato precisa fazer parte de todos os programas OpenGL? O tutorial explica os VAOs como:

Um Vertex Array Object (ou VAO) é um objeto que descreve como os atributos de vértices são armazenados em um Vertex Buffer Object (ou VBO). Isso significa que o VAO não é o objeto real que armazena os dados do vértice, mas o descritor dos dados do vértice. Os atributos de vértices podem ser descritos pela função glVertexAttribPointer e suas duas funções irmãs glVertexAttribIPointer e glVertexAttribLPointer, a primeira das quais exploraremos abaixo.

Eu não entendo como o VAO descreve os atributos do vértice. Eu não os descrevi de nenhuma maneira. Obtém a informação do glVertexAttribPointer? Eu acho que isso deve ser isso. O VAO é simplesmente um destino para as informações do glVertexAttribPointer?

Em uma nota lateral, o tutorial que estou seguindo é aceitável? Existe alguma coisa que eu deveria tomar cuidado ou um tutorial melhor para seguir?

questionAnswers(3)

yourAnswerToTheQuestion