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 :

Perte FPS; Loader OBJ maison


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut Perte FPS; Loader OBJ maison
    Salut a tous,

    Comme dis dans le titre j'ai une perte assez importante de FPS, il chute a 30 sur n'importe quelle machine; sur mon PC passe encore mais celui de mon ami designer qui n'as pas un machine de M**** ce n'est pas normal (je ne sais plus sa config si vous voulais je vous la passerais);

    Enfin bref, la perte de FPS est après la lecture et le chargement d'un fichier *.obj (je passe les source de mon loader ci-dessous [OBJLoader.cpp/.h).
    Je ne sais pas si c'est ma technique d'import qui est mauvaise ou mon contexte OpenGL (je vous passe le fichier qui appel le context ci-dessous [fenGL.cpp/.h]

    Je ne sais pas trop comment expliquer se problème, dites moi de quoi vous avez besoin et si vous avez des idée

    Petite précision : Les écriture d'information du chargement du fichier ainsi que celle dans le contexte OpenGL n'y sont pour rien, j'ai essayer mais rien n'y fais je chute.


    Merci d'avance pour l'aide que vous pourrai m'apporter,
    Jonathan.

  2. #2
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    Bjr,

    ça dépend un peu du nombre de triangles de l'objet chargé ...

    il faudrait peut-être envisager l'utilisation d'un VBO au lieu d'une liste d'affichage?

  3. #3
    Membre confirmé Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    Salut,
    Merci pour ta réponse.

    Je me suis renseigné au sujet des VBO mais au final il semblerait que la vitesse gagner ne soit pas si importante.
    Est-ce vrai ou cette vitesse négligeable est seulement dans certaine utilisation de VBO, je vais recommencer mes recherche.

    Mais au fait si j'utilise des VBO je garde toujours mon système de liste d'affichage ?


    Encore merci de ta réponse.

  4. #4
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Salut,

    sans avoir regardé trop en détails, quelques remarques / questions:

    - combien de polygones ton .obj? s'il y en a vraiment beaucoup ca peut bien entendu venir de là
    - tu utilises, dans OBJLoader.cpp, la commande glBegin(GL_TRIANGLES). Bien sûr ca marche, mais t'es obligé d'envoyer 3 sommets par triangle, alors qu'avec une GL_TRIANGLE_STRIP tu balances les 3 1ers sommets puis un seul pour chaque triangle supplémentaire
    - Tu peux ensuite pousser l'optimisation en mettant tout ca dans un vertex array, dans un 1er temps. L'ideal c d'avoir une liste de sommets où chaque sommet n'est présent qu'une fois, et une liste d'indices qui indiquent quels sommets sont à parcourir dans quel ordre pour former une GL_TRIANGLE_STRIP par exemple.
    - Une fois que ca marche avec le vertex array, passer de ca aux VBOs est très simple, et il y a encore un gain de performances (meme si c moins que le gain GL_TRIANGLES => GL_TRIANGLE_STRIP => GL_TRIANGLE_STRIP dans un vertex Array, ca apportera encore qq chose de plus)

    Mais au fait si j'utilise des VBO je garde toujours mon système de liste d'affichage ?
    J'ai lû à maintes reprises sur ce forum que ca ne servait à rien de mettre ses appels de VBOs dans une display list....c'est peut être vrai pour ce qui est de l'envoit des vertices à la carte graphique...mais dans mon projet par exemple, il y a aussi des transfos matricielles qui, elles, gagnent à être compilées dans une display list. De même pour le chargement de textures et cie

    En gros:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Draw
    {
      m_VBO.DrawVBO();
    }
    => pas besoin de display list

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Draw
    {
    glPushMatrix();
      glTranslatef(...);
      glRotatef(...);
      glBindTexture(...);
      m_VBO.DrawVBO();
    glPopMatrix();
    }
    => là je pense que ca apporte encore un petit quelque chose de caser ca dans une display list.
    => des avis exterieurs sur ce dernier point ?

    Sinon, à priori dans FenGL.cpp, la fonction initLoadOBJ:
    tu n'as à priori pas besoin de changer les états opengl avant de charger (a moins que ton loader fonctionne de maniere pas très standard)
    => tu peux enlever tous les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	glDisable(GL_CULL_FACE);
    	glDisable(GL_DEPTH_TEST);
    	glDisable(GL_LIGHT0);
    	glDisable(GL_LIGHTING);
    et les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    glEnable(GL_CULL_FACE);
    	glEnable(GL_DEPTH_TEST);
    	glEnable(GL_LIGHT0);
    	glEnable(GL_LIGHTING);
    qui suivent.

    Ca ne changera rien aux FPS dans ta boucle d'affichage mais bon, tant qu'on y est....

  5. #5
    Membre confirmé Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Par défaut
    Super je vais bosser sur ça !

    Merci pour ta réponse.
    A moi de répondre a la question que tu m'as posé a propos du nombres de polygones de mon *.obj : Je ne sais pas car c'est un loader qui doit importer n'importe quel *.obj.

    Encore merci ,
    Jonathan

  6. #6
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void FntGL::display()
    {
    if(load1)
    {
    initLoadOBJ();
    }
    }
    pourquoi dans le rendu tentes-tu de recharger les objets 3d ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void FntGL::avancer()
    {
    }
     
    void  FntGL::reculer()
    {
    }
    les fonctions ont quasiment le même code à ceci près que dans une, pour avancer tu incrémentes la position courante et pour reculer tu la soustraits.
    Tu aurais pu faire une méthode avec un simple if(sens==AVANCER){...}
    Imagines un projet de plusieurs milliers de ligne avec ce genre de copier-coller.
    Bonjour la relecture !

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

Discussions similaires

  1. Loader .obj / .mtl
    Par Ezarion dans le forum OpenGL
    Réponses: 8
    Dernier message: 28/11/2010, 16h09
  2. loader .obj , comment calculer le smoothing group
    Par aurel99 dans le forum OpenGL
    Réponses: 11
    Dernier message: 16/05/2009, 10h06
  3. Loader .obj pour moteur 3d
    Par pololebigboss dans le forum Moteurs 3D
    Réponses: 12
    Dernier message: 04/05/2009, 18h10
  4. Texture loader obj perso
    Par jashnlt dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 06/03/2009, 23h45
  5. Problème affichage cube (loader .obj)
    Par barbieaqua dans le forum OpenGL
    Réponses: 11
    Dernier message: 03/04/2008, 19h31

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