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 :
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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()
par des
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 glBegin(GL_TRIANGLES) //Plein de glVertex glEnd
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 glVertexArray(3, GL_DOUBLE, 0, buste) glDrawElements(..); ... glVertexArray(3, GL_DOUBLE, 0, bras) glDrawElements(..);
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
Partager