IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Performances OpenGL, Vertex Array, (VBO ?)


Sujet :

OpenGL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 61
    Points : 47
    Points
    47
    Par défaut 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 : 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()
    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
     
    glBegin(GL_TRIANGLES)
       //Plein de glVertex
    glEnd
    par des
    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(..);
    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

  2. #2
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 537
    Points : 5 222
    Points
    5 222
    Par défaut
    cette (ces) question(s) ont déjà été posées et se trouvent dans la FAQ également
    Qu'est ce qui est le plus rapide ? glVertex, display list, vertex array ou VBO ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 61
    Points : 47
    Points
    47
    Par défaut
    Oui merci, j'avais lu la FAQ. Quelle vitesse pensez vous que je puisse atteindre. J'affiche des objets qui font seulement un total de 5000 sommets sur chaque frame. Pour l'instant je ne peux que faire 200 projection en 3 secondes ce qui revient à projeter 1 000 000 de sommets en 3 secondes. Je ne trouve pas ca très rapide. (Mon but n'est pas l'affichage donc il me faut beaucoup plus que 30fps). Merci

  4. #4
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 537
    Points : 5 222
    Points
    5 222
    Par défaut
    pas mal commes perfs, tu ne dois pas avoir une trident comme carte vidéo
    enfin si c'est le cas elle doit être overclockée

    sérieusement, j'ai oublié ma boule de crystal polygonométrique et en plus je ne sait pas quelle carte tu possèdes
    mais bon, ça ne changerai rien au problème, il faut tester, tes polygones sont texturés ? tu utilises une quantité de textures et/ou de polygones qui dépasse la capacité mémoire de la carte ? tu fais d'autes traitements à côté ?
    tu l'as compris (j'espère), toi seul en testant peux obtenir la réponse à ta question

    la seule chose que je peux te dire c'est que les VBO peuvent multiplier tes performances genre un million de polygones qui rament en glBegin/glEnd et dix millions fluides en VBO

    edit : en plus ça dépend aussi des drivers

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 61
    Points : 47
    Points
    47
    Par défaut
    Ok merci, je vais tester les vbos. Pour répondre à ta question je ne fais aucun autre traitement que l'affichage de triangles qui ont tous une seule et même couleur pour un objet donné. Donc à priori les seuls calculs que ma carte devrait faire c'est de calculer la matrice de projection et de la multiplier par mes sommets. Mon but est de recaler un modèle articulé en 3d sur une image 2d, et essayer d'être le plus proche possible du temps réel. Je dois donc projeter mon modèle articulé de nombreuses fois avant de trouver le bon recalage. En moyenne je pense que pour recaler sur une frame je fais une 50aine de projection de mon modèle. Donc si je veux quelques frames par secondes, il me faudrait pouvoir faire proche des 500 projections par secondes, avec 5000 points pour le modèle 2 500 000 de points par secondes. J'essaie d'abord d'améliorer la partie opengl avant de chercher à améliorer l'algorithme d'optimisation. Je pense que c'est là que j'ai le plus à gagner.

  6. #6
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    sur une radeon 9800, j'arrive a afficher un modèle d'environ 2800 poly texturé à 1200FPS en vertex array simple, donc tu doit pouvoir ontenir les perf voulu avec un modèle de 5000 poly. par contre, dans mon cas, c'etait un seul modèle (donc pas de changement d'etats)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 61
    Points : 47
    Points
    47
    Par défaut
    Cool, merci. Je viens de comprendre comment marchaient les vbos. Je vais essayer de les implémenter. J'espère que j'arriverai à des bonnes performances ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [lwjgl/openGL] vertex array et drawElements
    Par tetedane1 dans le forum 3D
    Réponses: 0
    Dernier message: 24/04/2011, 14h17
  2. Réponses: 1
    Dernier message: 11/05/2007, 20h36
  3. Choix entre rendu direct, vertex arrays et VBOs
    Par nicoenz dans le forum OpenGL
    Réponses: 5
    Dernier message: 07/03/2007, 12h58
  4. VBOs / vertex array et blending
    Par nicoenz dans le forum OpenGL
    Réponses: 1
    Dernier message: 06/12/2006, 13h55
  5. Performance des vertex array
    Par Mathieu.J dans le forum OpenGL
    Réponses: 13
    Dernier message: 25/06/2004, 11h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo