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 d'affichage d'une liste des points 3D


Sujet :

OpenGL

  1. #1
    Membre régulier Avatar de highlight
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Novembre 2008
    Messages : 139
    Points : 101
    Points
    101
    Par défaut problème d'affichage d'une liste des points 3D
    Bonjour à tous,

    J'ai un bug qui me tracasse depuis des jours. Je peux pas l'identifier puisque je suis debutant en opengl. Voila mon probleme:

    J'ai un ensemble des points3D dans un fichier text:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    -11.7735 -6.95658 109.865 
    -8.50865 -9.08019 106.947 
    -8.79906 -9.04637 108.668 
    ....
    etc
    Afin de les afficher j'ai creer un program simple avec opengl. Mais rien n'est afficher: j'ai que la fenetre mais pas de points... pouvez vous m'aider svp... voila mon 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
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    #include <iostream>
    // Glut
    #include <GL/glut.h>
     
    #include <string>
    #include <fstream>
    #include <sstream> 
    #include <vector>
    #include "Read_files.h"
    using namespace std;
     
    Point3D S; // une variable de type la structure Point3D, 
     
    float w, h;
     
     
    void reshape (int nw, int nh)
    {
    	w = nw;
    	h = nh;
    }
     
     
    //
     
     
    ///////////////////////////
    void DrawPoints (void)
    {
     
     
    	glPointSize(5.0);
     
    	//traçage des points que je recupere de mon fichier text: x,y,z
     
       glBegin(GL_POINTS);
    	for( int i = 0 ; i < S.Numb_point3D ; i++ )
     
    		glVertex3f(S.x[i][0], S.y[i][1], S.z[i][2]); //affichage de x,y,z
     
    		glEnd();
     
     
    }
     
    void display (void)
    {
     
    	glViewport (0, 0, w, h);
    	glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     
    	DrawPoints ();
    	glutSwapBuffers ();
    }
    //////////////////////////
     
    int main(int argc, char **argv)
    {
    	S=Read_file("test.txt");
     
    	glutInitWindowSize (600, 400);
    	glutInitWindowPosition (400, 300);
    	glutInitDisplayMode (GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGB);
    	glutCreateWindow ("3D points");
    	glutDisplayFunc (display);
    	glutIdleFunc (display);
    	glutReshapeFunc (reshape);
    	glutSpecialFunc (Turn);
     
    	glClearColor (0.1, 0.2, 0.1, 1.0);
    	glEnable (GL_DEPTH_TEST);
    	glMatrixMode (GL_PROJECTION);
    	gluPerspective (40.0, 1.5, 1.0, 10.0);
    	glMatrixMode (GL_MODELVIEW);
     
    	glutMainLoop ();
     
     
     
     
    	return 0;
    }
    J'ai verifié la lecture des points x,y,z et il n'y a pas de probleme... merci de votre aide

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut
    Salut,
    Je pense que tu n'es pas dans la bonne section.

    Sinon pour ton problème as-tu changé les valeurs de ton gluPerspective (surtout celle du near et far clip - les deux dernières - )?
    Parce que d'après les points que tu as en source, la coordonnées Z est à plus de 100 or tu n'affiches que jusqu'à 10. Idem pour les deux autres coordonnées.

  3. #3
    Membre régulier Avatar de highlight
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Novembre 2008
    Messages : 139
    Points : 101
    Points
    101
    Par défaut
    Merci bcp pour ta réponse... t as raison j'ai pas vu cela merci pour cette remarque.. par contre comment trouvé le bon rapport pour les parametre de glPerspective? je sais pas vraiement comment faire...

    Effectivement, le Z de mes valeurs depasse 100, pour X et Y il y a meme des valeurs negative.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je crois qu'il manque un gluLookAt() afin de définir la matrice de vue, pour visualiser les points dans le cone de projet (définit par glPerspective()).
    (Si vous n'avez pas compris, il faut juste rajouter un gluLookAt() entre le glClear et le draw())
    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.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 576
    Points : 1 528
    Points
    1 528
    Par défaut
    comment trouvé le bon rapport pour les parametre de glPerspective?
    Au début tu peux te contenter d'un near clip très petit (genre 0.001, mais jamais 0.0 !), et un farclip très grand (100000). Tu risque d'avoir quelques bug appelés ZFighting, mais au moins tu ne clipera pas ta géométrie.

    Pour avoir des valeurs plus corrects (et limiter le ZFighting), le near correspond à la distance entre la camera et l'objet le plus proche d'elle, et le far la distance avec l'objet le plus loin d'elle.

    Pour le fovy, une valeur entre 45 et 90° (généralement 60). Moins de 40 et tu aura un effet "jumelle", plus de 90 tu aura un effet "fisheye" (donc pas très naturelle pour nous autre humains).

    Pour le ratio, prend le ratio de ton viewport (cela evitera les déformations). 600/400 dans ton cas.
    La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry

  6. #6
    Membre régulier Avatar de highlight
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Novembre 2008
    Messages : 139
    Points : 101
    Points
    101
    Par défaut
    Bonjour merci pour ta réponse pyros. Effectivement j'ai changé les paramètres de gluPerspective comme tu me les as expliqué. Par contre j'ai un résultat encore bizarre, j'ai la forme 3D qui s'affiche et qui s’éloigne jusqu'à ce qu'elle devienne très petite de plus en plus, je comprends pas la cause de ce comportement. Puisque c'est la première fois que je manipule openGL, j'ai pas mal de problème avec les fonctions..

    Citation Envoyé par pyros Voir le message
    Au début tu peux te contenter d'un near clip très petit (genre 0.001, mais jamais 0.0 !), et un farclip très grand (100000). Tu risque d'avoir quelques bug appelés ZFighting, mais au moins tu ne clipera pas ta géométrie.

    Pour avoir des valeurs plus corrects (et limiter le ZFighting), le near correspond à la distance entre la camera et l'objet le plus proche d'elle, et le far la distance avec l'objet le plus loin d'elle.

    Pour le fovy, une valeur entre 45 et 90° (généralement 60). Moins de 40 et tu aura un effet "jumelle", plus de 90 tu aura un effet "fisheye" (donc pas très naturelle pour nous autre humains).

    Pour le ratio, prend le ratio de ton viewport (cela evitera les déformations). 600/400 dans ton cas.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 576
    Points : 1 528
    Points
    1 528
    Par défaut
    Doit manquer un glLoadIdentity juste avant le gluPerspective. Sans ça, tu "cumule" ta perspective à chaque frame.
    La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry

  8. #8
    Membre régulier Avatar de highlight
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Novembre 2008
    Messages : 139
    Points : 101
    Points
    101
    Par défaut
    Citation Envoyé par pyros Voir le message
    Doit manquer un glLoadIdentity juste avant le gluPerspective. Sans ça, tu "cumule" ta perspective à chaque frame.
    Merci pour cette réponse. Ajouter glLoadIdentity n'a pas changer de resultat.

    Par contre j'ai pas compris ta deuxieme solution : "cumule ta perspective à chaque frame".
    Merci encore

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 576
    Points : 1 528
    Points
    1 528
    Par défaut
    Je voulais dire que sans le glLoadIdentity, la perspective se cumulait à chaque frame, mais en fait non car tu appel le gluPerspective dans le main et non dans la fonction display, donc ça ne viens pas de là.

    Tu ne fait aucun glScale, glMultMatrix ou autre dans la fonction display ?
    La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry

  10. #10
    Membre régulier Avatar de highlight
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Novembre 2008
    Messages : 139
    Points : 101
    Points
    101
    Par défaut
    Citation Envoyé par pyros Voir le message
    Je voulais dire que sans le glLoadIdentity, la perspective se cumulait à chaque frame, mais en fait non car tu appel le gluPerspective dans le main et non dans la fonction display, donc ça ne viens pas de là.

    Tu ne fait aucun glScale, glMultMatrix ou autre dans la fonction display ?
    Merci pour ton attention...
    voila le code de ma fonction display:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void display (void)
    {
     
    	glViewport (0, 0, w, h);
    	glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
             DrawPoints ();
    	glutSwapBuffers ();
    }
    c quoi le role de glViewport... pour etre honnete j'ai jute ajouté en copiant d'au autre exemple que j'ai trouvé sur le net

  11. #11
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 576
    Points : 1 528
    Points
    1 528
    Par défaut
    glViewport définie la zone de la fenêtre dans laquelle tu vas dessiner. Le plus simple étant de faire un viewport de la taille de ta fenêtre, mais tu peux avoir une fenêtre avec plusieurs viewport, comme dans un jeu à écran splitté ou les 4 viewport dans 3Dsmax ou autre logiciel de dessin.
    La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry

  12. #12
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut
    Si tu rencontres encore des difficultés et que tu ne sois pas obligés d'utiliser une vue en perspective, essaye avec une vue orthographique (glOrtho) à laquelle tu passes en paramètres les points de ta boîte englobante (facilement calculable lors de la lecture du fichier).

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/05/2008, 16h41
  2. Problème d'affichage avec une liste à puces
    Par Maxence45 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 09/07/2007, 21h09
  3. Problème d'affichage d'une liste déroulante sous IE
    Par devdebutante dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 09/07/2007, 15h29
  4. [MySQL] problème d'affichage dans une liste
    Par bromlecornu dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/05/2007, 16h08
  5. Problème d'affichage d'une liste déroulante
    Par licorne dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 05/09/2006, 13h07

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