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 :

[GLFW] Changer de resolution (pendant que le programme tourne)


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 79
    Par défaut [GLFW] Changer de resolution (pendant que le programme tourne)
    Voila, la question est déjà bien ammorcée dans le titre.

    Je cherche en effet à savoir comment, alors que le programme tourne, faire pour changer de resolution.

    Ce que je fais c'est :
    // blablabla on choisit la nouvelle resolution
    glfwCloseWindow;
    glfwOpenWindow(nouvelle_largeur, nouvelle_hauteur, 8, 8, 8, 8, 8, 32, GLFW_WINDOW);

    Ca marche à peu près dans le sens où la fenêtre se réouvre bien avec la résolution voulue, mais le problème est ce qui est affiché.

    Par exemple, là je suis en 600*400, et je veux passer en 800*600
    http://le.midu.free.fr/dev/1.gif
    je clique donc sur le +, puis sur valider, et c'est quand je clique sur valider (donc que le code au dessus s'executre, glfwCloseWindow...)
    ça devient comme ceci. Comme on ne voit plus rien, c'est un peu génant :p

    Je me dis alors que j'ai fait quelquechose de mal quelquepart, et je tente de lancer le programme directement en 800*600 (et non pas en 640*400 puis je modifie dedans), et ça donne ce qu'il faut (bon, ça déborde un peu, mais l'idée est là quoi).

    Je me demande donc si il n'y aurait pas une astuce particulière pour changer la résolution "in game".

    Merci pour vos réponses

    Cordialement,

    iLUV

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 547
    Par défaut
    tu réinitialises également ta matrice de projection avec ta nouvelle résolution ?
    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
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    probleme connu et tout simple...
    quand tu ferme ta fenetre, tu perd ton context openGL, et quand tu en réouvre une, ca crée un nouveau context openGL (qui n'a rien a voir avec le precedent, donc tout ce qui etait chargé par openGL (texture, display list et autre) doit etre rechargé (a moins d'utiliser des extension que je ne connais pas )
    et ca marche aussi pour des redimenssionnement de fenetres...
    * 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

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 79
    Par défaut
    Salut Bafman et Shenron :

    Alors Shenron :
    Je t'avouerais qu'on me parle toujours de "matrices de machintruc" et je ne vois pas exactement ce que c'est, donc... peut être.
    Voilà ce que je fais exactement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                largeur:= tabres[respos].taille;
                hauteur:= tabres[respos].haut;
                glfwCloseWindow;
                glfwOpenWindow(largeur, hauteur, 8, 8, 8, 8, 8, 32, GLFW_WINDOW);
                OnResize(largeur, hauteur);
    tabres[repos].taille et .haut contient les nouvelles largeur et hauteur
    glfwCloseWindow ferme la fenêtre.
    glfwOpenWindow ouvre une fenêtre de largeur "largeur" et de hauteur "hauteur" (les nouvelles dimensions récupérées juste au dessus).
    et OnResize c'est ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      procedure OnResize(width, height : integer); STDCALL;
      begin
        glViewPort(0, 0, width, height);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity;
        gluPerspective(60.0, width/height, 1.0, 6000);
      end;
    C'est la procédure qui pour moi est la plus sombre de mon code ^^ et j'avoue que je l'ai betement copié/collée :p

    Je ne sais pas si ça répond à ta question.

    Shenron :
    J'essaye ça dans un instant =)

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 547
    Par défaut
    Ta procédure OnResize fait exactement ce que je demandais, donc c'est bon de ce côté là

    pour information :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glViewPort(0, 0, width, height);
    tu définis la taille de ton affichage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glMatrixMode(GL_PROJECTION);
    tu passes en mode matrice de projection (la matrice qui va transformer une coordonnée 3D de ton "monde" en coordonnée 2D écran)
    tu réinitialises la matrice en chargeant la matrice identité (voir cours sur les matrices si tu ne connais pas)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gluPerspective(60.0, width/height, 1.0, 6000);
    tu définis une méthode de transformation 3D -> 2D, gluPersective va créer une matrice de projection de type perspective avec les paramètres que tu lui donne et la multiplier avec la matrice active : GL_PROJECTION

    Shenron :
    J'essaye ça dans un instant =)
    Je pense que tu parles à Bafman là

    et ton problème devrait effectivement se résoudre en suivant ses conseils
    si tu regardes quake 3 par exemple, le moteur recharge toutes les resources si tu changes de résolution pendant le jeu
    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.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 79
    Par défaut
    oui en effet je parlais à Bafman

    Merci beaucoup pour tes explications Shenron, elles vont directement dans mon bloc notes =)

    Merci aussi à toi Bafman, ça marche parfaitement maintenant.

    Et hop, mon premier problème résolu du nouveau forum

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

Discussions similaires

  1. [Débutant] Continuer à utiliser matlab pendant qu'un programme tourne
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 6
    Dernier message: 21/05/2010, 09h55
  2. Réponses: 3
    Dernier message: 02/11/2009, 21h40
  3. Exécuter une boucle tant que le programme tourne
    Par maxetx dans le forum Threads & Processus
    Réponses: 4
    Dernier message: 14/04/2009, 12h40
  4. Réponses: 2
    Dernier message: 05/06/2007, 14h17
  5. [VBA -E] Sablier pendant que le programme VBA tourne
    Par antoine.dandois dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/03/2007, 19h12

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