147 votes

Quelles sont les Vertex Array d'Objets?

Je suis juste de commencer à apprendre l'OpenGL aujourd'hui de ce tutoriel: http://openglbook.com/the-book/
Je suis au chapitre 2, où je dessine un triangle, et je comprends tout à tout sauf à la VAOs (est-ce que cet acronyme OK?). Le tutoriel a ce code:

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

Bien que je comprenne que le code est nécessaire, je n'ai aucune idée de ce qu'il fait. Bien que je n'utilise jamais VaoId-delà de ce point (sauf pour le détruire), le code ne fonctionne pas sans elle. Je suppose que c'est parce qu'il est nécessaire d'être lié, mais je ne sais pas pourquoi. N'exacte de ce code juste besoin d'être une partie de chaque programme OpenGL? Le tutoriel explique VAOs:

Un Sommet de la Matrice de l'Objet (ou le VAO) est un objet qui décrit la façon dont le sommet attributs sont stockés dans un Vertex Buffer Object (ou VBO). Cela signifie que le VAO n'est pas l'objet réel de ranger le vertex, mais le descripteur du vertex. Vertex attributs peuvent être décrites par les glVertexAttribPointer de la fonction et de ses deux sœurs fonctions glVertexAttribIPointer et glVertexAttribLPointer, la première que nous allons aborder ci-dessous.

Je ne comprends pas comment le VAO décrit le sommet des attributs. Je n'ai pas décrit en aucune façon. Est-il obtenir l'information à partir de la glVertexAttribPointer? Je suppose que ce doit être ça. Est le VAO simplement une destination pour les informations de glVertexAttribPointer?

Sur une note de côté, est le tutoriel, je suis acceptable? A quoi dois-je regarder pour, une meilleure tutoriel à suivre?

129voto

Hugh Points 649

"Vertex Array Objet" est offert par l'OpenGL CEA sous-comité pour l'Idiot Noms.

Pensez-y comme un objet géométrique. (Comme un vieux temps SGI Artiste programmeur, je les appelle geosets.) Les variables d'instance de l'objet sont à votre vertex pointeur, pointeur normal, la couleur du pointeur, attrib N pointeur, ...

Lorsqu'un VAO est d'abord lié, vous attribuez à ces membres en appelant glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer...; glEnableClientState(GL_NORMAL_ARRAY); glNormalPointer...; et ainsi de suite. Les attributs sont activés et les pointeurs que vous fournissez sont stockées dans le VAO.

Après cela, lorsque vous liez le VAO encore une fois, tous ces attributs et des pointeurs également devenir courant. Donc, on glBindVertexArray appel est équivalent à tout le code précédemment nécessaire pour mettre en place tous les attributs. C'est très pratique pour le passage de la géométrie autour de entre des méthodes ou des fonctions sans avoir à créer vos propres structures ou des objets.

(Une fois le programme d'installation, d'utilisation multiple est le moyen le plus facile à utiliser VAOs, mais vous pouvez également modifier les attributs seulement par la liaison et à en faire des plus activer/appels de pointeur. VAOs ne sont pas des constantes.)

Plus d'infos en réponse à Patrick questions:

La valeur par défaut pour un nouveau VAO est qu'il est vide (autant que je sache). Pas de géométrie, même pas des sommets, donc, si vous essayez de le dessiner, vous obtiendrez une erreur OpenGL. Cela est raisonnablement sain d'esprit, comme dans "tout initialiser False/NULL/zéro".

Vous avez seulement besoin de glEnableClientState lorsque vous définissez les choses. Le VAO se souvient de l'activation/désactivation de l'état pour chaque pointeur.

Oui le VAO va stocker glEnableVertexAttribArray et glVertexAttrib. L'ancien sommet, normale, couleur, ... les tableaux sont les mêmes que l'attribut tableaux, vertex == #0 et ainsi de suite.

12voto

bobobobo Points 17477

Vertex Array Objets sont comme des macros dans des logiciels de traitement de texte et la comme. Une bonne description est trouvé ici.

Les Macros juste rappelez-vous les actions que vous avez, comme activer cet attribut, lier la mémoire tampon, etc. Lorsque vous appelez glBindVertexArray( yourVAOId ), il suffit simplement de replays ceux attribut pointeur de liaisons et de tampon des liaisons.

Donc, votre prochain appel pour attirer l'utilise tout ce qui était lié par le VAO.

VAO n'entreposez pas de vertex. Pas de. Le sommet de données est stockée dans un vertex buffer ou dans une matrice de mémoire du client.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X