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 :

La mauvaise écriture nuit gravement aux performances


Sujet :

OpenGL

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut La mauvaise écriture nuit gravement aux performances
    Bonsoir,

    Dans ma reflexion stupide habituelle, je me suis posé plusieurs questions toutes aussi stupides que la reflexion. Pour tenter d'y répondre, j'ai décidé de rendre quatre fois la même scène, afin de l'afficher aux quatres coins de l'écran, et de dessiner 30 x 30 x 30 cubes, soit un grand cube composé de 27 000 Cubes. Tout d'abord pour ne pas avoir à m'embêter, j'ai affiché chaqu'un des cubes en utilisant un interleaved array, redessinant chaque cube après une translation. C'était trrrrès lent. J'ai refait pareil, en mettant tout le rendu de la scène dans une display list. C'était beaucoup mieu mais toujours lent. J'ai ensuite écrit explicitement les coordonnées de tous les cubes dans un grrrrrand interleaved array, mais là c'était l'horreur, 2 fps enfin bref. Comme je ne comprends pas grand chose encore, que malgrès mon asiduité à lire le red book, je ne comprends toujours pas, tout cela m'ammène à brillement poser cette question : Kékispace ?

  2. #2
    Membre averti Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Points : 332
    Points
    332
    Par défaut
    oyo
    si tu tournes à 60fps tu calculs 20 000 000 de tri /sec ce qui est déjà bien pour une carte graph surtout si t cubes sont texturés
    Sinon je pense qu il vaux mieux faire un cube, le mettre ds une display liste et faire des translation pour l affichage, pour lui y a juste des calcul de matrices et c donc bcp plus rapide a l affichage
    Car donné une coordonnée pour chaque cube c pour lui tt plein de points a calculé ! pas cool pour le pc y prefère les opérations simple et le pross graphique et optimisé pour les calcules de matrix
    dis moi tt les fps avec chaque tests ça m interesse bcp
    Pensez aux tutoriels programmation : http://programmation.developpez.com/cours-tutoriels/

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Holà non, je ne tourne pas à 60 fps. Et ce n'est pas en texturé, pas d'éclairage, un peu de brouillard pour faire joli mais c'est tout.

    Translations : 3.6 FPS
    Translations le tout dans une display list : 4.3 FPS
    Display List unique : 15 FPS
    Display List avec un grrrrrrrand tableau : 2.2 FPS

    Alors peut être, certainement, surement même, je m'y prend mal... Voilà ce que j'ai écrit pour le premier et le second essai par ex :

    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
    19
    20
    21
    22
     
      for (int j = 0 ; j < 30 ; j++)
      {
        glPushMatrix();
     
        for (int k = 0 ; k < 30 ; k++)
        {
          glPushMatrix();
     
          for (int l = 0 ; l < 30 ; l++)
          {
            glDrawElements(GL_QUADS, 24, GL_UNSIGNED_INT, IndicesP);
            glTranslatef(0.2, 0.0, 0.0);
          }
     
          glPopMatrix();
          glTranslatef(0.0, 0.2, 0.0);
        }
     
        glPopMatrix();
        glTranslatef(0.0, 0.0, 0.2);
      }
    C'est cette partie que j'ai modifiée dans les test 3 et 4, et c'est au milieu de d'autres opérations sans cout apparement, et englober dans une display list pour les cas 2 à 3.

  4. #4
    Membre averti Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Points : 358
    Points
    358
    Par défaut
    Tu as esseyer les tableaux de vertex et d'indice ? il me semble que c'est le plus performant .
    En tous cas ton étude m'interresse
    6*8 =42

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Ce n'est pas cela glDrawElements ?

  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
    effectivement c'est tres interessant comme etude
    bon je vait apporter ma pierre a l'edifice...
    deja les interleaved aray c'est vraiment pas tres utile au niveau perf, il faut mieux utiliser les vertex array de base qui permettent un meilleur controle pour activer ou desactiver les texures par exemple.
    si tu a un tableau pour dessiner un cube, il faut mieux, si tu en a la possiblité, utiliser glDrawArray(...) qui te dessine tout le tableau sans aller lire des indices, c'est plus rapide.
    autrement ce que je ferait, c'est d'afficher un premier cube dans une display liste en utilisant les vertex array, puis j'afficherait une ligne complete du cube en utilisant la premiere display liste avec des translations, puis j'afficherait une face du cube en utilisant la ligne avec des translations dans une autre display liste et finalement une derniere display liste avec le cube utilisant la face...

    sinon tu peut essayer de crée un tres grand tableau avec les coordonée de tout tes cubes et d'utiliser des compiled vertex array, la premier coup l'affichage sera lent mais apres tout sera en memoire graphique et la se sera super rapide...

    tu peut aussi regarder du coté des vertex buffer object (VBO) qui sont en fait des vertex array en memoire video qui se manipulent comme des texture ou des display liste je crois...

    tiens nous au courant de tes essais

    @+
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Euh afficher 27 000 cubes identiques n'est pas un but en soi... Moi si je m'y interesse, c'est pour essayer de comprendre ce qui est long, ce qui est rapide etc. Mais le Red Book dit qu'utiliser des Interleaved Array est interessant pour avoir des données arrangées, et parce qu'il ne faut process qu'une fois chaque Vertex.

Discussions similaires

  1. Réponses: 8
    Dernier message: 27/10/2011, 09h29
  2. Réponses: 2
    Dernier message: 28/06/2008, 22h52
  3. Mauvaise écriture verticale HTML
    Par ruru9 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 07/05/2008, 00h02
  4. Réponses: 13
    Dernier message: 15/07/2007, 22h25
  5. [Général] L'héritage nuit-il aux performances ?
    Par sebastien.cas dans le forum Schéma
    Réponses: 17
    Dernier message: 12/09/2006, 15h58

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