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 :

Vertex array performance


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de smartties
    Homme Profil pro
    Dev
    Inscrit en
    Février 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2010
    Messages : 222
    Par défaut Vertex array performance
    Salut, en ce moment je suis entrain de faire un petit moteur 3D basé sur opengl.
    Le moteur marche bien, mais j'ai un problème de performance avec les vertex array. J'ai fait plusieurs test et les vertex array s'affiche beaucoup plus vite mais de facon hasardeuse (dés fois sa sera 90fps et d'autre 15fps pour le même objet ).
    J'ai fait un test pour mesurer les performmances (en FPS) entre les vertex array et la facon native d'opengl ( glBegin(...);glVertex(...);glEnd(); )
    disponible a cette adresse la : http://smartties.netne.net/fgh.rar .
    (dans cette démo, l'application charge un .obj de 1mo, et qui a 15240 faces) Pouvez vous me dire si les vertex array s'affiche plus vite que les glVertex() ?

    ( laisser appuyer la touche " p " pour afficher l'objet en mode vertex array
    et " m " pour afficher l'objet en appelant les fonction glVertex();

    les Fraps par seconde son affiché dans le titre de la fenetre)

    Sachant que pour dessiner mon objet avec les vertex array je fais :

    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
    18
    void ...::draw_array()
    {
     
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_NORMAL_ARRAY);
     
           for(indice_face = 0; indice_face <= nb_face; indice_face++)
           {
           glVertexPointer(3, GL_FLOAT, 0, face[indice_face]->get_data_vertex());
           glNormalPointer(   GL_FLOAT, 0, face[indice_face]->get_data_normal());
     
           glDrawArrays(GL_POLYGON, 0, face[indice_face]->get_nb_vertex() );
           }
     
    glDisableClientState(GL_NORMAL_ARRAY);
    glDisableClientState(GL_VERTEX_ARRAY);
     
    }
    Merci

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    As-tu aussi pensé aux VBO ? Parce que ça devrait être plus rapide et ça t'éviterait d'utiliser des trucs obsolètes, surtout qu'au niveau de ton code il n'y aurait pas de trop grosses modifications à apporter, sachant que tu es déjà aux Vertex Arrays.
    Pour ton exe, je suis à 60 FPS en Vertex Array ou en Natif, donc ...
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre chevronné Avatar de smartties
    Homme Profil pro
    Dev
    Inscrit en
    Février 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2010
    Messages : 222
    Par défaut
    Oui je vais implementer les vbo , mais c'était juste pour tester l'efficacité des vertex array.
    Sinon je voulais savoir si les VBO était compatible avec toutes les carte graphique ?

  4. #4
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Euh, pas toutes, mais c'est supporté au moins depuis les Geforce FX (avant je ne sais pas, mais sur ma FX5600 c'était déjà supporté)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  5. #5
    Invité
    Invité(e)
    Par défaut
    Non les VBO ne marchent pas bien sur toutes les Intel (aucune idée pour les vertex arrays) de plus tu as un bug dans ton code, si pour chaque face tu donnes un glVertexPointer et glNormalPointer ça ne risque pas d'améliorer les perfs.

  6. #6
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut
    L'intérêt des vertex array c'est justement d'envoyer un tableau directement à la carte graphique et pas chaque sommet manuellement, toi tu as une utilisation des vertex array façon glBegin en envoyant chaque face. Bref aucun intérêt de l'utiliser de cette façon. Normalement tu set ton VertexPointer et NormalPointer une seule fois, tu dis combien il y a de points et le type de primitives et hop sa dessine tout d'un coup.
    Dans tous les cas je te conseil d'utiliser les VBO (à pars si tu veux modifier les points de ta géometrie en temps réel), si la carte graphique le permet et possède la mémoire nécessaire alors envoie tes données dans la ram graphique et utilise les VBO, s'ils ne sont pas supportés ou qu'il n'y a plus assez de ram graphiques alors stocke tes données dans un vertex array, après tout dépend de tes contraintes, performance, ou bien que ton moteur soit utilisable sur n'importe quelle machine même ancienne etc.

  7. #7
    Membre chevronné
    Homme Profil pro
    Ingénieur 3D
    Inscrit en
    Avril 2008
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur 3D

    Informations forums :
    Inscription : Avril 2008
    Messages : 400
    Par défaut
    Citation Envoyé par oxyde356 Voir le message
    Dans tous les cas je te conseil d'utiliser les VBO (à pars si tu veux modifier les points de ta géometrie en temps réel)
    Même si on veut modifier la géométrie en temps réel, il vaut mieux passer en VBO et spécifier que le mesh sera dynamique. Ça permet d'unifier le code et de pas avoir 36 classes pour gérer différent types de géométrie. De plus, si la géométrie ne change pas a chaque frame, mais juste régulièrement, les perfs seront améliorées par rapport aux vertex arrays (le mesh sera stocké dans une partie spécifique de la RAM réservée pour le driver - l'aperture memory - qui est un poil plus rapide d’accès).

  8. #8
    Membre chevronné Avatar de smartties
    Homme Profil pro
    Dev
    Inscrit en
    Février 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2010
    Messages : 222
    Par défaut
    face[indice_face]->get_data_normal() renvoi un pointeur sur un tableau de normales de dimmension tab[nb_sommet * 3], ce qui me fait une normal par sommet.Ce n'est pas bon?
    D'ou vien le bug ?

  9. #9
    Membre chevronné Avatar de smartties
    Homme Profil pro
    Dev
    Inscrit en
    Février 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2010
    Messages : 222
    Par défaut
    Ah d'accord merci! je n'avais pas trop compris,comment utiliser les vertex array.
    Mais en utilisant 1 seul fois glVertexPointeur(); avec un tableau contenant toutes mes face, alors toutes mes faces seront relié ?

  10. #10
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut
    Qu'appelle tu "face" dans ton programme ... ?

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

Discussions similaires

  1. Performances OpenGL, Vertex Array, (VBO ?)
    Par Burckel dans le forum OpenGL
    Réponses: 6
    Dernier message: 07/03/2007, 10h40
  2. Vertex arrays
    Par goutbouyo dans le forum OpenGL
    Réponses: 9
    Dernier message: 06/01/2005, 13h11
  3. [SDL+glut] vertex array précompilés
    Par khayyam90 dans le forum OpenGL
    Réponses: 3
    Dernier message: 01/10/2004, 17h07
  4. vertex array
    Par Jbx 2.0b dans le forum OpenGL
    Réponses: 2
    Dernier message: 12/07/2004, 11h37
  5. Performance des vertex array
    Par Mathieu.J dans le forum OpenGL
    Réponses: 13
    Dernier message: 25/06/2004, 10h47

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