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 :

Problème chute de FPS pour l'affichage d'une image en fond


Sujet :

OpenGL

  1. #1
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 883
    Points : 219 327
    Points
    219 327
    Billets dans le blog
    123
    Par défaut Problème chute de FPS pour l'affichage d'une image en fond
    Bonjour,

    J'ai fais un programme qui affiche une image au fond. ( En background ). Pour afficher l'image j'utilise ce code :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
        glMatrixMode(GL_MODELVIEW);
        glDisable(GL_DEPTH_TEST);
        glMatrixMode(GL_PROJECTION);
        glPushMatrix();
        glLoadIdentity();
     
        gluOrtho2D(0.0, WINDOW_SIZE_X, 0.0, WINDOW_SIZE_Y);	
        glMatrixMode(GL_MODELVIEW);
     
        glPushMatrix();
        glLoadIdentity();
     
        glBindTexture(GL_TEXTURE_2D, background->getTexture()); .
     
     
     
        glBegin(GL_QUADS);		                
     
        glTexCoord2f(0.0f, 0.0f); glVertex3f(0, 0,  0.0f);
        glTexCoord2f(1.0f, 0.0f); glVertex3f( WINDOW_SIZE_X , 0,  0.0f);
        glTexCoord2f(1.0f, 1.0f); glVertex3f( WINDOW_SIZE_X ,  WINDOW_SIZE_Y ,  0.0f);	
        glTexCoord2f(0.0f, 1.0f); glVertex3f(0,  WINDOW_SIZE_Y ,  0.0f);
     
        glEnd();
     
        glBindTexture(GL_TEXTURE_2D, 0);
     
        glMatrixMode(GL_MODELVIEW);
        glPopMatrix();
        glMatrixMode(GL_PROJECTION);
        glPopMatrix();
        glMatrixMode(GL_MODELVIEW);
        glEnable(GL_DEPTH_TEST);
    Ce code provoque une chute immense de FPS ( de 60 à moins de 1 FPS ).
    Est ce que vous connaissez une méthode moins lourde pour le CPU? Ou mieux, est ce que vous comprenez pourquoi cela provoque une chute de FPS immense ( 1FPS ). Comment faire passer ce code par le GPU ( je suis pas sur que ce soit lui qui gère )?
    Lorsque que j'avais mis un texte affichant le temps mis par le programme , le temps le plus long ( soit le moment ou ça bug ) et le quatrième vertex3f().
    J'ai se problème depuis si moi , et je n'ai plus aucune piste , merci pour toutes vos réponses , qui vont certainement m'éclairer.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 527
    Points : 5 195
    Points
    5 195
    Par défaut
    salut, le code que tu donnes ne peut être responsable d'une lenteur, il est vraiment minime, le problème vient forcément d'ailleurs

    qu'utilites tu comme bibliothèque de fenêtrage ?
    comment initialises tu ta fenêtre opengl ?
    quelle résolution utilises tu pour l'affichage ?
    quelle résolution fait ta texture ?

    tes drivers vidéo sont-ils à jour ?
    (tu peux tester en lançant une démo opengl ou un jeu utilisant opengl)
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 883
    Points : 219 327
    Points
    219 327
    Billets dans le blog
    123
    Par défaut
    qu'utilites tu comme bibliothèque de fenêtrage ?
    > Fenêtre crée avec la WinAPI ( on peut voir un code identique au mien dans les sujet de NeHe ou encore dans le template de Code::Blocks
    comment initialises tu ta fenêtre opengl ?
    > Je ne suis pas sur de la question : le code d'init des états d'openGL est :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
        glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
     
        glClearDepth(1.0);
        glDepthFunc(GL_LESS);
        glEnable(GL_DEPTH_TEST);
     
        glShadeModel (GL_SMOOTH);
     
     
        GLfloat light1[] = { 0.5, 0.2, 0.2, 1.0 };
        GLfloat light_ambient[] = { 1.0, 0.0, 0.0, 1.0 };
        GLfloat light_diffuse[] = { 1.0, 0.0, 0.0, 1.0 };
        GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };
        GLfloat light_position[] = { 3, -3, 1.0, 1.0 };
        GLfloat spot_direction[] = {-0,-0,-1.0};
     
     
        glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
        glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
        glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
        glLightfv(GL_LIGHT0, GL_POSITION, light_position);
        glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 1.0);
        glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.0);
        glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.0);
        glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 60.0);
        glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spot_direction);
        glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 10.0 );
     
        glLightfv(GL_LIGHT1, GL_AMBIENT, light1);
        glLightfv(GL_LIGHT1, GL_DIFFUSE, light1);
        glLightfv(GL_LIGHT1, GL_SPECULAR, light1);
     
        glLightfv(GL_LIGHT0, GL_POSITION, light_position);
     
        glEnable(GL_LIGHTING);
     
        glEnable(GL_LIGHT0);
     
     
        glEnable(GL_TEXTURE_2D);
     
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
     
        glBlendFunc(GL_SRC_ALPHA,GL_ONE);
     
        gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,80.0f);
     
        glMatrixMode(GL_MODELVIEW);
    quelle résolution utilises tu pour l'affichage ?
    > 1024 x 768
    quelle résolution fait ta texture ?
    > En réalité j'ai 3 textures , elle font 1024 x 768 et 800 x 600
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 527
    Points : 5 195
    Points
    5 195
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    quelle résolution fait ta texture ?
    > En réalité j'ai 3 textures , elle font 1024 x 768 et 800 x 600
    tu as essayé de remplacer tes textures par des textures en puissance de 2 ?
    le problème avec les textures dont les dimensions ne sont pas des puissances de 2 lorsqu'elles sont supportées étant que c'est inexploitable
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 883
    Points : 219 327
    Points
    219 327
    Billets dans le blog
    123
    Par défaut
    J'avais essayé ; en faisant un truc comme celui ci :
    http://www.developpez.net/forums/d61...puissance-2-a/

    Mais alors j'ai totalement échoué .
    Le gluScale me permet juste de "redimensionné" la texture si le système supporte pas une taille maximale de texture < à la taille sur l'axe des abscisses de la texture.
    Je me demande comment "redimenssionné" correctement , avec gluScale.. De plus est ce que je suis sur du résultat.
    J'aurais préféré faire le truc marqué dans l'autre post , qui me permettait de ne pas perdre de donnée sur la texture.

    Comment je vérifie si le système supporte les textures non puissance de 2.
    De plus qu'elle est la taille la plus proche ( correct ) pour 1024 x 768 et 600 x 600 ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 527
    Points : 5 195
    Points
    5 195
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    J'aurais préféré faire le truc marqué dans l'autre post , qui me permettait de ne pas perdre de donnée sur la texture.
    [...]qu'elle est la taille la plus proche ( correct ) pour 1024 x 768 et 600 x 600 ?
    pour faire simple, sans perdre les données sur la texture, tu peux faire comme si tes textures étaient en 1024x1024
    auquel cas il suffit d'adapter tes coordonnées de texture
    par exemple, pour la texture en 1024x768, tu as les texcoord :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    0.0 , 0.0
    0.1 , 0.0
    0.1 , 0.1
    0.0 , 0.1
    transformée en 1024x1024, résolution de puissance de 2 capable de tenir une image en 1024x768 sans perte de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    0.0 , 0.0
    0.1 , 0.0
    0.1 , 0.75 (768 / 1024)
    0.0 , 0.75
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 883
    Points : 219 327
    Points
    219 327
    Billets dans le blog
    123
    Par défaut
    Oki, je veux bien essayer , ( faudra que je trouve un PC ou mon programme plante )
    mais expliquez moi comment vous passer ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    de                 à
    0.0 , 0.0    -> 0.0 , 0.0
    0.1 , 0.0    -> 0.1 , 0.0
    0.1 , 0.1    -> 0.1 , 0.75 ( 768 x 1024 )
    0.0 , 0.1    -> 0.1 , 0.75 ( 768 x 1024 )
    Est surtout pourquoi modifié de 0.1 à 0.75
    Car après avoir gluScale la texture pour remplir mon ecran il faut que je faisse :

    ( Cette fois je met les coordonnées de mon programme )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    0.0 , 0.0
    1024 , 0.0
    1024 , 768
    0.0 , 768
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 527
    Points : 5 195
    Points
    5 195
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    expliquez moi comment vous passer ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    de                 à
    0.0 , 0.0    -> 0.0 , 0.0
    0.1 , 0.0    -> 0.1 , 0.0
    0.1 , 0.1    -> 0.1 , 0.75 ( 768 x 1024 )
    0.0 , 0.1    -> 0.1 , 0.75 ( 768 x 1024 )
    Est surtout pourquoi modifié de 0.1 à 0.75
    ce n'est pas 768 x 1024 mais 768 / 1024 (= 0.75)

    les coordonnées d'une texture, quelque soit la taille de la texture, sont comprises entre 0 et 1
    le centre de la texture est donc à 0.5
    si tu colles une image en 1024 x 768 dans une texture en 1024 x 1024, tu as donc une bande vide en bas de la texture, tes coordonnées de texture sur l'axe v doivent s'arrêter là où ton image s'arrête : 768 (la taille de l'image) / 1024 (la taille de la texture) = 0.75 (la coordonnée de texture)

    Car après avoir gluScale la texture pour remplir mon ecran il faut que je faisse :

    ( Cette fois je met les coordonnées de mon programme )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    0.0 , 0.0
    1024 , 0.0
    1024 , 768
    0.0 , 768
    avec de telles coordonnées, tu va remplir ta géométrie avec ta texture répétée 1024 fois sur l'axe u et 768 fois sur l'axe v

    j'ai l'impression que tu 'as pas bien saisi le fonctionnement du texturing
    il faudrait commencer par comprendre les bases avec de faire compliquer
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  9. #9
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 883
    Points : 219 327
    Points
    219 327
    Billets dans le blog
    123
    Par défaut
    Oui merci , j'ai compris. J'avais soit mal lu ton message ,soit je suis trop idiot ; je pensais que tu parlais du vertex3f et non du texcoord2f. C'est pour cela que j'était un peu paumé.
    Cette fois j'ai tout compris , y a plus qu'a trouvé un PC ou cela plante ( j'en aurais peut être un demain )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 527
    Points : 5 195
    Points
    5 195
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    je pensais que tu parlais du vertex3f et non du texcoord2f. C'est pour cela que j'était un peu paumé.
    ça me rassure, bon en même temps c'est lundi, ça aide pas
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  11. #11
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 883
    Points : 219 327
    Points
    219 327
    Billets dans le blog
    123
    Par défaut
    J'ai fais le gluScale que tu m'as dit et ça marche
    Donc un gros merci , un super merci pour toi shenron666

    Par contre je tiens à préciser qu'il n'y a pas besoin de modifier les coordonnées dans le glTexCoord*();
    A cause , qu'il semblerai que OpenGL ne se contente pas d'un simple copier coller mais fais un redimenssionnement de la texture. Soit si tu bouge les coordonnées tu coupe la texture.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

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

Discussions similaires

  1. problème d'affichage d'une image de fond
    Par titi42 dans le forum Débuter
    Réponses: 4
    Dernier message: 16/09/2009, 19h11
  2. Syntaxe pour l'affichage d'une image en PHP
    Par johnson95 dans le forum Langage
    Réponses: 2
    Dernier message: 18/08/2008, 17h09
  3. Affichage d'une image en fond d'ecran
    Par morane_j dans le forum Java ME
    Réponses: 3
    Dernier message: 27/04/2007, 11h09
  4. Affichage d'une image de fond
    Par foxofx dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 16/04/2007, 15h58
  5. Affichage d'une image de fond sur un site
    Par eugiragal dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 20/12/2006, 18h43

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