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 :

Afficher un graphe en 2D (glOrtho2D)


Sujet :

OpenGL

  1. #1
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut Afficher un graphe en 2D (glOrtho2D)
    Salut !

    J'aurais besoin de vos conseils avisés pour la partie 2D de mon programme, parceque je suis tout perdu

    En fait, une fonctionnalité consiste à afficher des graphes dans une fenetre 2D. Ils s'affichent correctement tant que l'on ne redimentionne pas la fenetre, mais le redimentionnement pose problème puisque le graphe n'occupe alors plus tout l'espace.

    J'ia pensé que le plus simpe était de définir un espace 2d allant de 0 à 1, mais on dirait que les appels à glOrtho (lors du redimentionnement) n'ont aucun effet. Pourtant, le 1er appel (lors de la création de la fenêtre) doit surement fonctionner, puisque l'affichage est correct au départ.

    Voilà le code qui correspond au reshape (j'ai pu verifier qu'il est bien executé quand on change la taille de la fenetre)
    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
    	glViewport(0, 0, _iLargeur, _iHauteur);
     
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
     
    	//
    	//	Coordonnées de la fenetre
    	//
    	//  0,1 ------- 1,1
    	//
    	//    |          |
    	//    |          |
    	//
    	//  0,0 ------- 1,0
    	//
     
    	// left, right, bottom, top, near, far
    	glOrtho(0, 1, 0, 1, -1, 1);
     
    	glMatrixMode(GL_MODELVIEW);


    Merci pour vos conseils, j'avoue que je bloque un peu la !
    A+

    bigquick

  2. #2
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 535
    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 535
    Points : 5 217
    Points
    5 217
    Par défaut
    Après le redimensionnement, est-ce que ton affichage est bien raffraichit ?

    note en passant que si tu conserves les coordonnées (0,0) (1,1) ta vue sera déformée lorsque tu redimensionneras ta fenêtre

  3. #3
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Essai plutôt d'utiliser glOrtho avec les dimensions réelles de ta fenetre !
    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     glOrtho(0,640,0,480,-1,1);

  4. #4
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Salut à tous les 2, et merci pour vos réponses !

    note en passant que si tu conserves les coordonnées (0,0) (1,1) ta vue sera déformée lorsque tu redimensionneras ta fenêtre
    Oui oui, jusetment c'est ce que je souhaite (comme c'est pour un graphe, l'utilisateur doit pouvoir étirer la fenetre en largeur afin de pouvoir étirer le graphe)

    Après le redimensionnement, est-ce que ton affichage est bien raffraichit ?
    Oui oui, j'ai bien verifié avec un point d'arrêt, et la fenetre est réaffichée.

    Sinon,
    glOrtho(0,640,0,480,-1,1);
    Je viens de tester à l'instant, mais ca ne change rien ...

    Enfin finalement, je vais surement utiliser glOrtho au début de ma fonction d'affichage, puisque ça va tout simplifier :
    Je n'ai qu'à calculer les extremes de mon graphe (pour que tout rentre ), les specifier à glOrtho, et ensuite normalement je pourrai rentrer mes glVertex3f avec des coordonnées brutes ....
    c'est bien ça non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //   Coordonnées de la fenetre
       //
       //  xMin,yMax ------- xMax,yMax
       //
       //    |                   |
       //    |                   |
       //
       //  xMin,yMin ------- xMax,yMin
       //

    Enfin ça simplifie mon travail derrière, mais malheureusement ça ne change rien au problème Même avec glOrtho appelé au début de la fonction d'affichage, le resize ne marche pas

    Est-ce que vous avez d'autres idées de causes pour mon dysfonctionnement?

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 85
    Points
    85
    Par défaut
    Voici un test app simple qui fonctionne bien, tu dois faire une erreur à quelque part

    int OnResize(int WindowX, int WindowY)
    {
    gs_unWindowWidth = WindowX;
    gs_unWindowHeight = WindowY;
    glViewport(0, 0, gs_unWindowWidth, gs_unWindowHeight);
    return 0;
    }

    void PreDraw(void)
    {
    glClearColor(0,0,1,1);
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-1,1,-1,1,-1,1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    }

    void Draw(void)
    {
    glBegin(GL_QUADS);
    glColor4f(1,0,1,0.5);glVertex3f(-0.5,-0.5,0);
    glColor4f(1,0,1,0.5);glVertex3f(-0.5,0.5,0);
    glColor4f(1,0,1,0.5);glVertex3f(0.5,0.5,0);
    glColor4f(1,0,1,0.5);glVertex3f(0.5,-0.5,0);
    glEnd();
    }

  6. #6
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    OK merci, je vais essayer ça ....

    Je vous tiens au courant, et en effet, j'espère bien avoir fait une erreur quelquepart, et que c'est pas ma version des DLL OpenGL qui est buggée (genre glOrtho qui a un problème). Je sais pas si c'est le genre de trucs qui arrive, mais ça serait vraiment pas de bol !

Discussions similaires

  1. probleme pour afficher un graph
    Par superspike23 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 08/02/2008, 17h36
  2. Un algorithme simple pour afficher un graphe
    Par wondersonic dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 04/02/2008, 00h23
  3. [Turbo Pascal] Afficher un graphe
    Par info_amel dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 01/02/2008, 15h39
  4. afficher arbre, graph
    Par CaptainChoc dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 14/09/2006, 14h55
  5. Afficher un graphe
    Par Luffy Duck dans le forum MFC
    Réponses: 8
    Dernier message: 23/03/2006, 20h09

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