Partage
  • Partager sur Facebook
  • Partager sur Twitter

[HELP] Encore une histoire de lenteur !

Vous pouvez m'aider à régler mon problème de lenteur extrême ?

    23 mai 2006 à 5:36:09

    Bon, je suis désolé, en premier lieu, de poster deux questions de suite :-° et deuxièmement, de poster ENCORE une question sur la lenteur d'un programme :euh: .En fait, je voulais savoir pourquoi mon programme est extrêmement lent et que si je l'oublie quelques minutes (4 pour être exacte) il me donne un message d'erreur du genre "Votre ordi va mourrir si vous la torturez encore comme ça !" Bref, je remercie celui ou ceux qui prendrons le temps d'analyser les codes sources ci présent.

    #include <SDL/SDL.h>
    #include <GL/gl.h>
    #include <GL/glu.h>
    #include <cstdlib>
    #include <SDL/SDL_image.h>
    #include "sdlglutils.h"

    //les fichiers des objets:

    #include "objects_guerre.h"
    #include "objects_meubles.h"
    #include "objects_bureau.h"
    #include "objects_depot.h"
    #include "objects_essentiel.h"
    #include "objects_divers.h";

    #define LARGEUR_ECRAN 640
    #define HAUTEUR_ECRAN 480

    int angle_terre = 0;

    void dessiner();

    int main(int argc, char *argv[]){

    int continuer = 1, tempsPrecedent = 0, tempsActuel = 0;

    SDL_Event event;

    SDL_Init(SDL_INIT_VIDEO);

    atexit(SDL_Quit); //à la sortie, on ferme bien la SDL
    SDL_WM_SetCaption("3 Dimensions !",NULL);
    SDL_SetVideoMode(LARGEUR_ECRAN,HAUTEUR_ECRAN,32,SDL_OPENGL);

    glEnable(GL_DEPTH_TEST); //ceci va corriger les problèmes de profondeur Z-index

    glEnable(GL_TEXTURE_2D); //ceci active le texturing

    while(continuer){

    SDL_PollEvent(&event);
    switch(event.type){

        case SDL_QUIT:
        continuer = 0;
        break;

        case SDL_KEYDOWN:
        switch(event.key.keysym.sym){

            case SDLK_ESCAPE: //escape = arrêter
            continuer = 0;
            break;

        }
        break;

    }

    angle_terre --;

    dessiner();

    }

    SDL_Quit();

    exit(0);

    }

    void dessiner(){

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) ;

        glMatrixMode( GL_PROJECTION ); //on entre en mode projection
        glLoadIdentity(); //on recharge la matrix pour éviter l'accumulation
        gluPerspective(70,(double)LARGEUR_ECRAN/HAUTEUR_ECRAN,1,1000);

    gluLookAt(3,2,3,0,0,0,0,0,1); //positionnement de la caméra

    glPushMatrix();

    add_plancher(30);

    glTranslated(-4,0,0);

    add_caisse(1);

    glTranslated(-4,2,0);

    add_caisse(0);

    glTranslated(-4,0,2);

    add_caisse(0);

    glTranslated(-4,-2,0);

    add_caisse(0);

    glTranslated(-4,-2,2);

    add_caisse(0);

    glTranslated(-4,2,1);

    add_rocket(1.5);

    glTranslated(-4,-4,0);

    add_baril(3);

    glTranslated(-4,-4,3.03);

    add_baril(3);

    glTranslated(-4,-6,0);

    glRotated(90,0,1,0);

    add_baril(3);

    add_bureau_travail();

    glTranslated(0,-2,1.8);

    add_ordi();

    glTranslated(-0.2,0,1.8);

    glRotated(15,0,0,1);

    add_flatscreen();

    glTranslated(-0.2,1.3,1.8);

    glRotated(-15,0,0,1);

    add_terre(angle_terre);


        glFlush(); //s'assure que la forme est respecté
        SDL_GL_SwapBuffers(); //idem à Flip (affiche à l'écran)

    }


    Voilà pour mon code principale, bon, tout les fichiers que j'inclus servent à modèliser des objets et sont tous faites pareils donc je n'en met qu'un seul (celui qui fait le plancher).

    #include <SDL/SDL.h>
    #include <GL/gl.h>
    #include <GL/glu.h>
    #include <cstdlib>
    #include <SDL/SDL_image.h>
    #include "sdlglutils.h"

    //sol:
    GLuint texturesol;

    void add_plancher(int size){

           texturesol = loadTexture("Items/floor.jpg");

            glColor3ub(255,255,255);
        glBindTexture(GL_TEXTURE_2D, texturesol);
        glBegin(GL_QUADS);

        glTexCoord2i(0,0);
        glVertex3i(-size,-size,-1);

        glTexCoord2i(size,0);
        glVertex3i(size,-size,-1);

        glTexCoord2i(size,size);
        glVertex3i(size,size,-1);

        glTexCoord2i(0,size);
        glVertex3i(-size,size,-1);
        glEnd();

    glPopMatrix();
    glPushMatrix();

    }


    Donc voilà,
    Merci beaucoup.

    Cordialement,
    Kevin (kegi@hotmail.com)
    • Partager sur Facebook
    • Partager sur Twitter
      23 mai 2006 à 5:41:12

      Grrr tu es le 3ème en 2 jours à charger tes textures à chaque image.
      Un peu d'entrainement avec la SDL avant !
      Qui vous a dit de charger des surfaces en permanences ? Personne.
      Et bien là c'est pareil !
      CHarges les textures au démarrage seulement et après contente toi de faire des Binds.

      Lire les exemples du cours serait une bonne idée aussi...
      • Partager sur Facebook
      • Partager sur Twitter
        23 mai 2006 à 5:44:34

        pardon grand maitre mais je ne te suis pas... :S

        glBindTexture(GL_TEXTURE_2D, texturesol);

        ici je déféni la texture que je veux et qui est déjà charger non ?

        EDIT: Désolé j'avais mal compris mais maintenant, comment je fait pour charger une texture en globale pour éviter d'être obligé de la charger à chaque fois ??

        RÉ-ÉDIT: En passant, peu importe l'heure que je viens tu es TOUJOURS conecté, tu es bien certain de dormir des fois :lol: ?!??

        Cordialement,
        Kevin (kegi@hotmail.com)
        • Partager sur Facebook
        • Partager sur Twitter
          23 mai 2006 à 5:52:49

          -Variables globales au programme ou
          ou
          - variables passées en argument de tes fonctions de desssins.

          A toi de voir.

          (No sleep tonight, yes, but that's not only the case).
          • Partager sur Facebook
          • Partager sur Twitter
            23 mai 2006 à 5:55:53

            Dans le cas des variables globales, comment je fait pour avoir une variable super globale (de fichiers en fichiers) ??

            Cordialement,
            Kevin (kegi@hotmail.com)
            • Partager sur Facebook
            • Partager sur Twitter
              23 mai 2006 à 6:07:32

              Dans 1 seul fichier :
              GLuint matexture;

              Dans TOUS les autres qui l'utilisent :
              extern GLuint matexture;
              • Partager sur Facebook
              • Partager sur Twitter
                23 mai 2006 à 6:25:06

                j'ai le gout de tout lâcher des fois tellement j'y comprend rien !

                dans mon main je met:
                GLuint texturesol;
                int main(int argc, char *argv[]){
                texturesol = loadTexture("Items/floor.jpg");
                [...]
                }


                et dans mon autre fichier je met:
                glBindTexture(GL_TEXTURE_2D, extern GLuint texturesol);

                et bien entendu rien ne marche...
                merci de votre patience

                Cordialement,
                Kevin (kegi@hotmail.com)
                • Partager sur Facebook
                • Partager sur Twitter
                  23 mai 2006 à 12:09:31

                  extern GLuint texturesol; au _début_ de ton autre fichier en dehors de tout bloc de fonction. Puis tu l'utilises comme d'hab cad "texturesol".
                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 mai 2006 à 19:40:56

                    dans mon fichier main.cpp je met:

                    GLuint texturesol;

                    int main(int argc, char *argv[]){

                    texturesol = loadTexture("Items/floor.jpg");

                    [...]

                    }


                    et dans mon autre fichier, je met:

                    extern GLuint texturesol;

                    void add_plancher(int size){

                            glColor3ub(255,255,255);
                        glBindTexture(GL_TEXTURE_2D, texturesol);
                        glBegin(GL_QUADS);
                    [...]
                    }


                    Et Ça ne marche pas ! :colere2:
                    </span></span></span>
                    Cordialement,
                    Kevin (kegi@hotmail.com)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 mai 2006 à 19:42:31

                      Comment ça ça marche pas ?
                      Il te renvoit bouler à la compilation où c'est à l'exécution que ça merde ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 mai 2006 à 20:04:13

                        Aucun problèmes à l'exécution c'est juste que mon plancher est blanc (aucune texture...)

                        Cordialement,
                        Kevin (kegi@hotmail.com)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 mai 2006 à 20:11:16

                          Moi je n'ai pas de problème.
                          T'es sur de pas mettre du code dans tes .h mochement par hasard ?

                          Regarde moi :

                          main.cpp
                          #include <SDL/SDL.h>
                          #include <GL/gl.h>
                          #include <GL/glu.h>
                          #include <cstdlib>
                          #include <SDL/SDL_image.h>
                          #include "sdlglutils.h"

                          //les fichiers des objets:

                          #define LARGEUR_ECRAN 640
                          #define HAUTEUR_ECRAN 480

                          int angle_terre = 0;

                          void add_plancher(int); //ici je feinte car j'ai pas de .h

                          GLuint texturesol;

                          void dessiner();

                          int main(int argc, char *argv[]){

                          int continuer = 1, tempsPrecedent = 0, tempsActuel = 0;

                          SDL_Event event;

                          SDL_Init(SDL_INIT_VIDEO);

                          atexit(SDL_Quit); //à la sortie, on ferme bien la SDL
                          SDL_WM_SetCaption("3 Dimensions !",NULL);
                          SDL_SetVideoMode(LARGEUR_ECRAN,HAUTEUR_ECRAN,32,SDL_OPENGL);

                          glEnable(GL_DEPTH_TEST); //ceci va corriger les problèmes de profondeur Z-index
                          texturesol = loadTexture("floor2.jpg");
                          glEnable(GL_TEXTURE_2D); //ceci active le texturing

                          while(continuer){

                          SDL_PollEvent(&event);
                          switch(event.type){

                              case SDL_QUIT:
                              continuer = 0;
                              break;

                              case SDL_KEYDOWN:
                              switch(event.key.keysym.sym){

                                  case SDLK_ESCAPE: //escape = arrêter
                                  continuer = 0;
                                  break;

                              }
                              break;

                          }

                          angle_terre --;

                          dessiner();

                          }

                          SDL_Quit();

                          exit(0);

                          }

                          void dessiner(){

                          glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) ;

                              glMatrixMode( GL_PROJECTION ); //on entre en mode projection
                              glLoadIdentity(); //on recharge la matrix pour éviter l'accumulation
                              gluPerspective(70,(double)LARGEUR_ECRAN/HAUTEUR_ECRAN,1,1000);

                          gluLookAt(3,2,3,0,0,0,0,0,1); //positionnement de la caméra

                          glPushMatrix();

                          add_plancher(30);

                          glTranslated(-4,0,0);


                              glFlush(); //s'assure que la forme est respecté
                              SDL_GL_SwapBuffers(); //idem à Flip (affiche à l'écran)

                          }


                          other.cpp
                          #include <SDL/SDL.h>
                          #include <GL/gl.h>
                          #include <GL/glu.h>
                          #include <cstdlib>
                          #include <SDL/SDL_image.h>
                          #include "sdlglutils.h"

                          //sol:
                          extern GLuint texturesol;

                          void add_plancher(int size){

                              glColor3ub(255,255,255);
                              glBindTexture(GL_TEXTURE_2D, texturesol);
                              glBegin(GL_QUADS);

                              glTexCoord2i(0,0);
                              glVertex3i(-size,-size,-1);

                              glTexCoord2i(size,0);
                              glVertex3i(size,-size,-1);

                              glTexCoord2i(size,size);
                              glVertex3i(size,size,-1);

                              glTexCoord2i(0,size);
                              glVertex3i(-size,size,-1);
                              glEnd();

                          glPopMatrix();
                          glPushMatrix();

                          }


                          Et au pire si tu n'y arrives toujours pas, tu peux passer l'identifiant de la texture en parametre de add_plancher si tu veux.

                          Edit : au passage
                          CAYMAL
                          glMatrixMode( GL_PROJECTION ); //on entre en mode projection
                              glLoadIdentity(); //on recharge la matrix pour éviter l'accumulation
                              gluPerspective(70,(double)LARGEUR_ECRAN/HAUTEUR_ECRAN,1,1000);
                          gluLookAt(3,2,3,0,0,0,0,0,1); //positionnement de la caméra


                          CAYMIEUX
                          glMatrixMode( GL_PROJECTION ); //on entre en mode projection
                              glLoadIdentity(); //on recharge la matrix pour éviter l'accumulation
                              gluPerspective(70,(double)LARGEUR_ECRAN/HAUTEUR_ECRAN,1,1000);
                          glMatrixMode( GL_MODELVIEW );
                           glLoadIdentity();
                          gluLookAt(3,2,3,0,0,0,0,0,1); //positionnement de la caméra
                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 mai 2006 à 20:25:04

                            J'ai Enfin résolvé mon problème ! je mettait:

                            texturesol = loadTexture("Items/floor.jpg");
                            glEnable(GL_TEXTURE_2D);

                            maintenant, je met:
                            glEnable(GL_TEXTURE_2D);
                            texturesol = loadTexture("Items/floor.jpg");


                            C'est assez drole parce que ca fonctionnait de cette facon avec un seul fichier. Merci Kayl pour ta patience.

                            Cordialement,
                            Kevin (kegi@hotmail.com)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 mai 2006 à 20:28:27

                              Mouais, je suis pas convaincu de ta solution miracle.
                              Si ça marche pour toi tant mieux.
                              Mais il n'est pas nécessaire d'"énabler" le texturing pour charger des textures. L'état enable du texturing est juste utilisé au moment du rendu. (OpenGL is state machine).
                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 mai 2006 à 20:36:54

                                En fait tu as raison, il faut seulement le mettre après que opengl soit exécuté... je me trompe p-e mais ce coup si j'ai plus tester avant de parler loll Et on ne se moque pas ok ??

                                Cordialement,
                                Kevin (kegi@hotmail.com)
                                • Partager sur Facebook
                                • Partager sur Twitter

                                [HELP] Encore une histoire de lenteur !

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown