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

GLUT Discussion :

incomprehension total de l'affichage


Sujet :

GLUT

Vue hybride

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 104
    Par défaut incomprehension total de l'affichage
    Bonjour,

    (desole pour les accents et tout ca mais ordi avec claviers qwerty)

    J'avoue que je nage comme pas possible depuis plusieurs jour pour comprendre comment configurer les matrics pour affiches mes polygones.

    Pour resumer j'ai le code d'init comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        glutInit(&argc,argv);
        glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH);
        glutInitWindowPosition(100,100);
        glutInitWindowSize(600,600);
        glutCreateWindow("2D Display");
        glutDisplayFunc(affichage);
        glutReshapeFunc(ReSizeGLScene);
        glEnable(GL_DEPTH_TEST);
        glutKeyboardFunc(clavier);
        glutSpecialFunc(clavierSpecial);
        glutMouseFunc(souris);
        glutMotionFunc(souris_mouvement);
        glutMainLoop();
    et dans ma fonction affichage pour l'instant je n'ai que la creation de tous mes polygones
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void affichage(void){
     
       // ici j'affiche mes polygones avec glBegin(GL_POLYGON);...
     
     
    }
    mes polygones ont pour coordonnes des x et y compris entre -800 000 et +800 000 pour les x et 0 400 000 pour les y
    le minimun et le maximun pour les x et y sont stockes dans les variables
    minX, maxX, minY,maxY

    et maintenant je ne sais absoluement pas quoi faire.
    quelqu'un pourrait m'expliquer comme a un gamin comment je dois faire pour que ma scene soit bien centre au milieu.
    je pense qu'apres je m'en sortirai pour les rotation et tout ca.

    merci d'avance.
    sylvain.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 104
    Par défaut
    j'ai essaye de configurer comme cela :

    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
     
    // init OpenGlDisplay
    void myInit() {
     
     
    	glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); // mode d'affichage des polygones
    	glShadeModel(GL_SMOOTH); // modèle d'illumination GL_FLAT
    	glEnable(GL_DEPTH_TEST); // activation du Z-Buffer
    	glDepthFunc(GL_LEQUAL); // gestion du Z-Buffer : GL_LESS GL_LEQUAL GL_ALWAYS
    	glEnable(GL_COLOR_MATERIAL); // active la coloration des objets
    	glClearColor(0.0f,0.0f,0.0f,1.0f); // couleur du fond de la scène
     
    	// --------------------------------
    	// init de la matrice de projection
    	// --------------------------------
    	glViewport(0, 0, width, height);
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity(); // init à la matrice identité
    	gluPerspective(45.0f, // angle d'ouverture de la caméra
    				   width/height, // ratio de la fenêtre
    				   0.1f,1000.0f); // distance min et max de la scène
     
    	// -------------------------
    	// init de la matrice de vue
    	// -------------------------
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity(); // init à la matrice identité
    	float Xcam = (myArea->getMaxX()-myArea->getMinX())/2.0+myArea->getMinX();
    	float Ycam = (myArea->getMaxY()-myArea->getMinY())/2.0+myArea->getMinY();
    	float XlookAt = (myArea->getMaxX()-myArea->getMinX())/2.0+myArea->getMinX();
    	float YlookAt = (myArea->getMaxY()-myArea->getMinY())/2.0+myArea->getMinY();
    	gluLookAt(Xcam, // position of the camera  X
    			  Ycam, // position of the camera Y
    		      0, // position of the camera Z
    		      XlookAt, // where the camera is going to look at X
    		      YlookAt, // where the camera is going to look at Y
    		      1, // where the camera is going to look at Z
    		      0,
    		      1,
    		      0);
     
    }
    et ma fonction display :
    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
     
    // function to display in OpenGl
    void affichage(void){
     
    	myInit();
     
    	// -------------------
    	// display all polygon
    	// -------------------
    	// for all region
    	for(vector<region*>::iterator i = myArea->getListRegion().begin(); i != myArea->getListRegion().end();++i){
    		// for all county
    		for(vector<county*>::iterator j = (*i)->getlistCounty().begin(); j != (*i)->getlistCounty().end();++j){
    			// for all ded
    			for(vector<ded*>::iterator k = (*j)->getListDed().begin(); k != (*j)->getListDed().end();++k){				
    				// for all polygone
    				for(vector<polygone*>::iterator l = (*k)->getListPolygone().begin(); l != (*k)->getListPolygone().end();++l){
    					/* initialize random seed: */
    					srand ( time(NULL) );
    					// define color
    					float maCouleurRed = (rand() % 255)/255.0;
    					float maCouleurGreen = (rand() % 255)/255.0;
    					float maCouleurBlue = (rand() % 255)/255.0;
    					// start polygone
    					glBegin(GL_POLYGON);
    						// for all point
    						for(vector<point*>::iterator m = (*l)->getListPoint().begin(); m != (*l)->getListPoint().end();++m){
    							glColor3f(maCouleurRed,maCouleurGreen,maCouleurBlue); 
    							glVertex2f((*m)->getX(),(*m)->getY());
    						}
    					// end polygone
    					glEnd();
    				}
    			}
    		}
     
    	}
     
     
    	// display the result
    	glutSwapBuffers(); 
    }
    la camera est place en 242 342.81 pour les x
    em 311 819.19 pour les y
    et elle regarde vers ces memes points

    par ailleurs le min de mes polygones est
    en x : 160 238.85 et en y : 222 427.28
    et le max :
    en x ; 324 446.77 et en y : 401 211.07

    donc la camera regarde bien au centre de la scene mais je n'ai toujours rien qui s'affiche (et je suis sur que l'affichage est correct car je l'ai teste avant avec un truc tout moche et tout pourri et la je veux refaire bien mais ca marche pas)
    si quelqu'un pouvait m'aider je suis preneur j'ai pas trop envi de passer mon week-end au boulot

  3. #3
    Membre éprouvé Avatar de Harooold
    Homme Profil pro
    Ingénieur 3D temps réel
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    gluPerspective(45.0f, // angle d'ouverture de la caméra
    				   width/height, // ratio de la fenêtre
    				   0.1f,1000.0f); // distance min et max de la scène
    Ton Znear est à 0.1, et ce que tu affiches avec tes glVertex2f aura un z = 0, du coup ils ne rentrent pas dans le volume de vision.

    Pour faire de la 2D utilises plutot glOrtho à la place de glPerspective qui comme son nom l'indique effectue une projection perspective, donc plutot pour les projections 3D.

    Ce que tu dois faire est donc de définir le volume de vision en projection orthogonale avec glOrtho en fonction des Xmin Xmax Ymin Ymax des polygones. Et en Zmin Zmax du volume de vision tu n'as qu'a mettre -1. , 1. , vu que tout tes polygones seront sur le plan d'équation Z=0 c'est suffisant.

    A part ça, tes X = 34763326.2435, ça fait peur

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 104
    Par défaut
    Citation Envoyé par Harooold Voir le message
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    gluPerspective(45.0f, // angle d'ouverture de la caméra
    				   width/height, // ratio de la fenêtre
    				   0.1f,1000.0f); // distance min et max de la scène
    Ton Znear est à 0.1, et ce que tu affiches avec tes glVertex2f aura un z = 0, du coup ils ne rentrent pas dans le volume de vision.

    Pour faire de la 2D utilises plutot glOrtho à la place de glPerspective qui comme son nom l'indique effectue une projection perspective, donc plutot pour les projections 3D.

    Ce que tu dois faire est donc de définir le volume de vision en projection orthogonale avec glOrtho en fonction des Xmin Xmax Ymin Ymax des polygones. Et en Zmin Zmax du volume de vision tu n'as qu'a mettre -1. , 1. , vu que tout tes polygones seront sur le plan d'équation Z=0 c'est suffisant.

    A part ça, tes X = 34763326.2435, ça fait peur
    j'ai corrige et ca marche mieux. j'ai desactive la fonction glulookat et garder juste l'ortho pour l'instant. on verra bien pour la suite apres (je dois passer en 3d normalement )
    en fait j'ai du mal a comprendre pourquoi ma fonction glutlookat ne marche pas avec l'ortho.

    pour mes x c'est des coordonnees en Irlande

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 104
    Par défaut
    bon je comprends vraiment pas le principie de visualisation dans openGL

    j'ai donc ma scene qui s'affiche mais des que j'active la camera (gluLookAt) je n'ai plus rien qui s'affiche

    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
     
    // init OpenGlDisplay
    void myInit() {
     
    	glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); // mode d'affichage des polygones
    	glShadeModel(GL_SMOOTH); // modèle d'illumination GL_FLAT
    	glEnable(GL_DEPTH_TEST); // activation du Z-Buffer
    	glDepthFunc(GL_LEQUAL); // gestion du Z-Buffer : GL_LESS GL_LEQUAL GL_ALWAYS
    	glEnable(GL_COLOR_MATERIAL); // active la coloration des objets
    	glClearColor(0.0f,0.0f,0.0f,1.0f); // couleur du fond de la scène
     
    	// --------------------------------
    	// init de la matrice de projection
    	// --------------------------------
    	glViewport(0, 0, width, height);
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity(); // init à la matrice identité
    	double test = myArea->getMinZ();
    	glOrtho(myArea->getMinX(),
    			myArea->getMaxX(),
    			myArea->getMinY(),
    			myArea->getMaxY(),
    			-100, //  -myArea->getMaxZ()
    			100); // -myArea->getMinZ()
     
     
     
    	// -------------------------
    	// init de la matrice de vue
    	// -------------------------
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity(); // init à la matrice identité
    	float Xcam = (myArea->getMaxX()-myArea->getMinX())/2.0+myArea->getMinX();
    	float Ycam = (myArea->getMaxY()-myArea->getMinY())/2.0+myArea->getMinY();
    	float XlookAt = (myArea->getMaxX()-myArea->getMinX())/2.0+myArea->getMinX();
    	float YlookAt = (myArea->getMaxY()-myArea->getMinY())/2.0+myArea->getMinY();
    	gluLookAt(Xcam, // position of the camera  X
    			  Ycam, // position of the camera Y
    		      100, // position of the camera Z
    		      XlookAt, // where the camera is going to look at X
    		      YlookAt, // where the camera is going to look at Y
    		      0, // where the camera is going to look at Z
    		      0,
    		      1,
    		      0);
     
    }
    la camera est place en plein milieu de la scene a une hauteur de 100 et regarde vers le centre de celle ci
    je devrais donc voir quelque chose mais rien

    de meme si je fais un glRotate de 15 par exemple sur la scene sans le gluLookAt il m'affiche bien ma scene mais sans la rotation.

    c'est totalement insence. ou est ce que j'ai faux car j'ai beau lire des tonnes de tutoriel dans chaque exemple on explique jamais on met par exemple un 4 dans un parametre.

    bref a l'aide !!!!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 104
    Par défaut
    j'ai essaye d'avance mais je rencontre toujorus des trucs bizarres

    j'ai initialiser gluLookAt a :
    gluLookAt(0., 0., 0., 0., 0., -1., 0., 1., 0.);

    et il m'affiche ma scene ce que je trouve bizarre vu que je mes coordonnees sont au minimun en 300 000 pour les x

    donc est ce que glulookat se refere au volume glOrtho et donc attribue de nouvelles coordonnees ?

    par ailleurs j'essaie de faire une rotation mais la encore c'est un gros massacre.

    j'ai pense a deux solutions :
    bouger la camera.
    bouger les objets.

    en tout logique vu le nombre d'objet je pense qu'il serait plus interessant de bouger la camera que les objets. donc il faudrait modifier gluLookAt mais comment ?

    j'ai essaye pour voir de modifier les objets avec glRotatef(15,0,1,0) et j'ai pas vraiment l'impression que ca marche. enfin si j'ai lamoitie de mes polygones qui s'affichent.

    bref a l'aide !!!

Discussions similaires

  1. [MySQL] mysql_num_rows = bon total VS fonction affichage donne toujours moins 1 résultats
    Par lechatam dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/08/2014, 18h05
  2. Affichage en double incompréhensible
    Par divad dans le forum Langage
    Réponses: 6
    Dernier message: 03/08/2007, 16h17
  3. Affichage par total de vote (php et/ou sql)
    Par bigbib dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/12/2006, 06h28
  4. listview, affichage du total d'une colonne
    Par zx10 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 04/12/2006, 17h58
  5. Affichage javascript total ligne tableau dynamique
    Par falz222 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/08/2006, 20h17

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