Performances OpenGL, Vertex Array, (VBO ?)
Bonjour,
J'ai un problème de performances avec OpenGL.
Pour donner l'idée de mon programme, j'ai un objet articulé à afficher dans chaque frame. Pour donner un exemple, avec un objet en deux parties, un buste et un bras. Ces deux objets sont indéformables, c'est à dire que la position relative(dans leur propre référentiel) de leur sommet est toujours la même. En revanche le bras est lié au buste par une liaison rotule qui évolue d'une frame à l'autre.
J'avais commencé par programmer le rendu comme ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
// Ces paramètres sont variables d'une frame à l'autre
glTranslated(bustetx, bustety, bustetz);
glRotated(busterx, bustery, busterz);
// Ceci est constant
glColor3f(1.0, 0, 0);
glBegin(GL_TRIANGLES)
// Une liste de glVertexd()
glEnd()
// Ces paramètres sont variables d'une frame à l'autre
glTranslated(brastx, brasty, brastz);
glRotated(brasrx, brasry, brasrz);
// Ceci est constant
glColor3f(0, 1.0, 0);
glBegin(GL_TRIANGLES)
// Une liste de glVertexd()
glEnd() |
J'ai lu sur le net, que les glVertex sont ce qu'il y a de plus lent. D'après ce que j'ai compris, je pourrais commencer par les remplacer par des Vertex Array, ce qui remplacerait dans le code les
Code:
1 2 3 4
|
glBegin(GL_TRIANGLES)
//Plein de glVertex
glEnd |
par des
Code:
1 2 3 4 5 6
|
glVertexArray(3, GL_DOUBLE, 0, buste)
glDrawElements(..);
...
glVertexArray(3, GL_DOUBLE, 0, bras)
glDrawElements(..); |
C'est ce que je suis en train d'essayer de faire, pour voir si ca améliore les perfs. Mais déjà je me demande si ca optimise même si on fait que passer d'un array à l'autre, puis vaut-il mieux créer un InterleavedArray sachant que la couleur de chaque partie est la même pour chaque sommet.
Ensuite j'ai vu que on pouvait faire des Listes, qui ressemblent un peu à ca de ce que j'en ai vu. Puis des Vertex Array compilés avec une extension d'OpenGL (mes somments sont toujours les même, mais j'ai deux arrays alors je me demande si ca marche) et enfin des VBOS, qui ont l'air plus lourds à mettre en place, et je ne sais pas si c'est nécessaire pour un rendu aussi simple que le mien, c'est à dire sans lumière, textures, ...
Qu'est ce qui vous semble le plus adapter pour augmenter mes perfs ?
Merci