-
Un VBO par objet 3D ?
Bonsoir,
je débute un peu en OpenGL, même si je suis parvenu à effectuer mes premiers dessins cubes/pyramides/trucs plats ; je m'attache à tenter de bien comprendre la construction de scène, avant de me plonger dans des thèmes comme l'éclairage.
Jusqu'ici, je construisais mes scènes avec les traditionnels glVertex*. Il semble que cette méthode soit peu performante, et assez rapidement je suis tombé sur le concept de VBO. Je me pose alors une question : est il possible de créer autant de VBO qu'on le souhaite, ou du moins beaucoup ? Plus exactement, je vois dans les tutos comment on crée et utilise un VBO. Sauf qu'à chaque fois, on parle d'un seul VBO, voire 2 ; or une scène 3D peut comporter pleins d'objets en 3d. Je me demande donc s'il est possible de créer un VBO par objet 3D,que ça soit pour représenter par exemple une maison, un banc, etc...bref des objets génériques qu'on stocke une fois en mémoire et qu'on réutilise plusieurs fois dans un rendu ; ou bien s'il fallait limiter le nombre de VBO, c'est à dire rassembler tous les polys d'une scène, ou presque, au sein d'un nombre limité de VBO, et ensuite se débrouiller avec les fonctions gldrawelement et compagnie, pour dessiner au fur et à mesure les polys dont on a besoin.
Merci pour votre réponse, en espérant avoir été assez clair dans ma question...:oops:
-
Un VBO par objet me paraît une bonne base pour débuter. Après, les magouilles dont tu parles sont bonnes pour optimiser par rapport à un contexte bien précis, mais avant d'en arriver là tu as du chemin.
-
Merci pour la rapidité de la réponse ;).
J'avais une autre question, qui découle de la suivante : est ce qu'on peut ajouter des VBOs à la volée ?
En effet, je lis une très mystérieuse fonction glGenBuffers à utiliser dans le cadre des VBOs. Problème, elle demande un paramètre entier pour générer le nombre de VBO stockés, ce qui veut donc dire que ça "fixe" indirectement le nombre de VBO à l'avance, non ? A moins de passer par des manipulations peu naturelles, qui consistent à regénérer un tableau d'identifiant VBO à chaque fois qu'on ajoute un objet en 3D...
-
glGenBuffers() créé des VBOs t'en veux 10 tu lui en demande 10... t'en veux 10 de plus, tu lui en redemande 10. ça ne fixe absoluement pas le nombre de VBOs que tu peux creer.
-
Oui mais si j'en ai 10 de déjà créé, et que j'en veux 20, je peux faire un appel de glgenbuffers sur un GLsize de 10, et traité le pointeur second paramètre à part du premier, ou bien il faut que je détruise le premier pointeur de VBO, et réappeler glgenbuffers avec un GLsize de 20 ?
-
glGenBuffers() te renvoie simplement les identifiants qu'il viens de creer, si tu en veux 10, puis 10 autres, tu fait tes 2 appels simplement. chaque appel est indépendant.