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 :

Probleme de visualisation


Sujet :

OpenGL

  1. #1
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut Probleme de visualisation
    Bonjour, j'espère que quelqu'un pourra m'aider sur le sujet, je suis là dessus depuis environs 5 heures et je n'arrive pas a y aboutir!


    Voici la situation, j'ai un canevas openGL qui fait 700x477 dans ma fenetre wxWidgets et je dessine un cube

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    void GL_MAILLAGE::Dessine(wxPaintEvent &event) { 
        wxPaintDC dc(this);
        SetCurrent();
     
        if (!m_init) InitGL();
     
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
     
        GLint viewport[4]; 
        glGetIntegerv(GL_VIEWPORT, viewport); 
     
        const float aspectRatio = (float)(viewport[2]) / (float)(viewport[3]); 
        gluPerspective(45, aspectRatio, 0.1, 100); 
     
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
     
        glEnable (GL_DEPTH_TEST);
     
           gluLookAt(5,5,10,0,0,0,0,1,0);                       
           glBegin (GL_QUADS); 
                   glColor3d(1,0,0); 
                   glVertex3i (-1,-1,1);  // premiere face
                   glVertex3i (-1,1,1); 
                   glVertex3i (1,1,1); 
                   glVertex3i (1,-1,1); 
     
                   glColor3d(0,0,1); 
                   glVertex3i (-1,-1,-1); // deuxieme face
                   glVertex3i (-1,1,-1); 
                   glVertex3i (1,1,-1); 
                   glVertex3i (1,-1,-1); 
     
                   glColor3d(0,1,0); 
                   glVertex3i (-1,1,-1);  // troisieme face
                   glVertex3i (1,1,-1); 
                   glVertex3i (1,1,1); 
                   glVertex3i (-1,1,1); 
     
                   glColor3d(1,1,0); 
                   glVertex3i (-1,-1,-1);  // quatrieme face
                   glVertex3i (1,-1,-1); 
                   glVertex3i (1,-1,1); 
                   glVertex3i (-1,-1,1); 
     
                   glColor3d(0,1,1); 
                   glVertex3i (-1,-1,-1);  // cinquieme face
                   glVertex3i (-1,-1,1); 
                   glVertex3i (-1,1,1); 
                   glVertex3i (-1,1,-1); 
     
                   glColor3d(1,0,1);       // sixieme face
                   glVertex3i (1,-1,-1); 
                   glVertex3i (1,-1,1); 
                   glVertex3i (1,1,1); 
                   glVertex3i (1,1,-1); 
           glEnd(); 
    glFlush();
    SwapBuffers();
    }
     
     
    void GL_MAILLAGE::InitGL() {  
        glViewport(0, 0, (GLint)700, (GLint)477); 
        glClearColor(0.0f,0.0f,0.0f,0.0f);
        m_init = true;   
    }

    Le problème est que je dessine un cube qui a des coté de longueur 1 et je dois faire un gluLookAt(5,5,10,0,0,0,0,1,0); sinon il est beaucoup TROP gros (voir pas visible)

    Ce qui a pour conséquence que lorsque je veux dessiner pour de vrai (en chargeant un fichier) et que les coordonnées sont d'environ 30, -25, -30 etc... je ne suis pas capable d'avoir un rendu adéquat. (Je ne suis pas capable de voir le solide au complet etc...) et je ne trouve pas un gluLookAt pour me permettre de le voir en entier je ne vois que des parties seulement!

    Au secours! Si quelqu'un voit une omission, une erreur ou une suggestion que je pourrais vérifier ca serait grandement apprécié car je sais plus quoi faire!

  2. #2
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    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 524
    Points : 5 184
    Points
    5 184
    Par défaut Re: [OpenGL] - Probleme de visualisation
    Si tu détectes les dimensions de ton cube, tu calcules la position de ton point de vue et tu le place avec gluLookAt en fonction de ces dimensions
    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
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Hum je comprend pas super bien ce que tu veux dire?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 119
    Points : 106
    Points
    106
    Par défaut
    et que les coordonnées sont d'environ 30, -25, -30
    Ce sont les coordonnées de quoi ?? de ton maillage ??

    Ta caméra doit être certainement mal placé, comment a tu déterminé les valeurs des parametres de gluLookAt ?? Parce que si ton maillage n'ai pas toujours aux mêmes coordonnées, c'est sur que tu verra presque jamais correctement ton cube.
    C'est pour ça qu'il faut que tu appelle gluLookAt avec des paramètres qui dépendent du positionnement de ton maillage (comme te la dit shenron666, si g bien compris)

    Ce qui faudrait c'est positionner ton maillage au centre, placer ta caméra face à la scène ( gluLookAt(...) ) et pouvoir faire une translation de la caméra pour simuler un zoom ( glTranslated(...) ).

  5. #5
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Oui c'étais des coordonnées fictives du maillage.

    C'était plus un problème de clipping car en le mettant à 200 au lieu de 100 dans le glPerspective je ne perd plus de morceau (étant donné que je suis à 100 de la caméra ca clippait parfois)

    Mais, comment je fais pour savoir le positionnement de mon maillage?? Et le positionner au centre??

    Pour l'instant avec mon maillage de test j'utilise un gluLookAt(15,50,100,0,0,0,0,1,0); ET un glScale(0.5,0.5,0.5)

    Je le vois donc d'asser loin (pour qu'il soit visible en entier), de haut et légèrement à droite.

    Screenshot

    Cependant comme vous le voyez je dois dézoomer énormement, il y aurait pas moyen d'arranger ca autrement?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 119
    Points : 106
    Points
    106
    Par défaut
    Quel type de fichier veux-tu charger ?? C'est toi qui les as créé ??

    De toute façon, tu dois lire le contenu de ces fichiers donc tu connais le positionnement de ton maillage.
    Si c'est toi qui les créé arrange-toi pour le dessiner plus vers le centre sinon lors de la lecture stocke les min ou les max de ton maillage pour les 3 axes. Ensuite tu pourra utiliser gluLookAt avec des paramètres tirés de ces min ou max pour positionner la caméra. (c'est plus facile à dire qu'à faire j'avoue)

  7. #7
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Oui c'est un fichier qui est créé à partir d'un programme ici au département. Le fichier est lu et des coordonnées à tracer sont extraites (noeuds, segments, triangles, tetraedres)

    Je fais par exemple un



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    gluLookAt(15,50,100,0,0,0,0,1,0);
    glScalef(0.7,0.7,0.7);
    J'obtient un vue sur le haut, légèrement à droite du maillage et ca fonctionne. Seulement il manque un coin.

    Capture: cliquer ici

    Si je prend la fenêtre et je la déplace en la faisant déborder de l'écran et je la ramène au milieu de l'écran le coin a été dessiner...?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 119
    Points : 106
    Points
    106
    Par défaut
    J'avais pas bien compris, je pensais qu'il manquait des choses parce qu'elles n'étaient pas acdrées dans la fenêtre mais apparement le problème est autre.

    Si tu recommence plusieurs fois est-ce que il y a tt le tps la meme partie qui manque ??
    Normalement il ne devrait pas y avoir de raison pour qu'il manque des segments comme sur ton dessin. Je pense que le problème doit venir du fichier, es-tu sure de la fiabilité de ton programme ??

  9. #9
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    J'ai trouvé ce qui clochait. C'est wxWidgets et les évènements de painting qui cause le problème. Lorsque je charge le fichier cela se fait via un Open File Dialog et la partie du dessin qui est dessiner correspond à la taille du OpenFile Dialog (Autrement dit il dessine seulement sur la zone qui doit être repeinturé suite à la fermeture du OpenFile Dialog)


    J'ai donc intercepter l'évènement Paint de mon frame
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void MyFrame::OnPaint(wxPaintEvent& event) {
        m_glcanvas->Dessine();
    }
    Il appelle la fonction de dessinage de mon canevas OpenGL afin que le dessin soit dessiner en entier.

    Cela fonctionne, le dessin est dessiner en entier. Le problème maintenant est que le painting du frame fonctionne plus ou moins bien. Voir screenshot.

    Tu serais pas callé en wxWidgets par hasard?

  10. #10
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Problème résolu! Voir http://www.developpez.net/forums/viewtopic.php?t=486530 pour détails!

  11. #11
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    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 524
    Points : 5 184
    Points
    5 184
    Par défaut
    j'avais mal compris ton problème, je pensais que ton objet n'entrait pas dans le cadre de ta fenêtre
    d'après ta capture, j'aurai pensé à un problème de zfar trop faible
    finalement tu as réussi à te dépatouiller d'un problème lié à wxWidgets
    félicitations
    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.

  12. #12
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Je croyais au départ que c'étais un problème de viewport (IE: Le dessin est trop grand pour la zone de dessin et il est coupé) mais j'étais sur une fausse route. Pas évident!

    Pour mieux comprendre le problème je n'ai pas mit l'initialisation des matrices et le clear du buffer dans le load de l'application (donc ca donnait une écran toute brisé)

    Ensuite j'ai ouvert mon openFile Dialog et j'ai chargé mon fichier et c'est la que j'ai constaté que la zone peinte correspondait à la zone du openfile dialog



    J'ai donc pu déduire que c'étais un problème de paint de wxWidgets !

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

Discussions similaires

  1. Probleme lors visualisation page en php
    Par Aspic dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 06/05/2007, 01h00
  2. [ECLIPSE]- Probleme de visualisation de dependencies
    Par DanielW33 dans le forum Maven
    Réponses: 1
    Dernier message: 25/01/2007, 18h01
  3. Probleme de visualisation flash sur internet
    Par tigger_riric dans le forum Flash
    Réponses: 6
    Dernier message: 11/12/2006, 11h35
  4. probleme de visualisation l applet dans IE
    Par mechatikhaled dans le forum Applets
    Réponses: 2
    Dernier message: 28/02/2006, 09h35
  5. [eclipse 2] probleme de visualisation de source en debug
    Par bast dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 27/10/2005, 09h51

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