Właśnie zaczynam uczyć się OpenGL dzisiaj z tego samouczka: http://openglbook.com/the-book/
Dotarłem do rozdziału 2, w którym rysuję trójkąt i rozumiem wszystko oprócz VAO (czy ten akronim jest w porządku?). Samouczek ma ten kod:
glGenVertexArrays(1, &VaoId);
glBindVertexArray(VaoId);
Chociaż rozumiem, że kod jest niezbędny, nie mam pojęcia, co robi. Chociaż nigdy nie używam VaoId po tym punkcie (z wyjątkiem zniszczenia go), kod nie działa bez niego. Zakładam, że dzieje się tak, ponieważ jest to wymagane, ale nie wiem dlaczego. Czy dokładnie ten kod musi po prostu być częścią każdego programu OpenGL? Samouczek wyjaśnia VAO jako:
Obiekt Vertex Array (lub VAO) to obiekt, który opisuje, w jaki sposób atrybuty wierzchołków są przechowywane w obiekcie Vertex Buffer Object (lub VBO). Oznacza to, że VAO nie jest rzeczywistym obiektem przechowującym dane wierzchołków, ale deskryptorem danych wierzchołków. Atrybuty wierzchołków można opisać funkcją glVertexAttribPointer i jej dwiema siostrzanymi funkcjami glVertexAttribIPointer i glVertexAttribLPointer, z których pierwszą zajmiemy się poniżej.
Nie rozumiem, jak VAO opisuje atrybuty wierzchołków. W żaden sposób ich nie opisałem. Czy pobiera informacje z glVertexAttribPointer? Myślę, że to musi być to. Czy VAO to po prostu miejsce docelowe dla informacji z glVertexAttribPointer?
Na marginesie, czy samouczek, który śledzę, jest do przyjęcia? Czy jest coś, na co powinienem uważać lub lepszy poradnik do naśladowania?