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 :

pb de transformations


Sujet :

OpenGL

Vue hybride

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 87
    Par défaut pb de transformations
    bonjour,

    pour les besoins d'un programme je dois pourvoir tourner et déplacer un objet pas nécéssairement centrer sur l'origine. Or jusqu'a présent j'ai toujours travailler avec des petits exemples centré sur l'origine.

    là je bloque. En fait j'ai penser à translater l'objet de son centre de gravité à l'origine (0,0,0), appliquer ma rotation et re-translater l'objet à son centre de gravité mais ça foire. Je ne comprend pas pourquoi. Si qq1 pouvais prendre 2 min pour m'expliquer ça serais sympa

  2. #2
    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
    se serait plus simple de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    glPushMatrix()
    glLoadIdentity()
    glRotatef()
    glTranslated()
    glPopMatrix
    par contre je sait plus si il faut fair la rotation avant la translation ou l'inverse...
    * 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

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 87
    Par défaut
    c'est a dire ?

    un truc style :

    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
     
     
    glLoadIdentity();
     
    camera.put();
     
    // se place au centre de gravité de l'obj
    glTranslatef(centreObj.x, centreObj.y, centreObj.z);
     
    glPushMatrix();
     
    glLoadIdentity();
    glRotatef(....);  // rotation utilisateur
     
    // dessin de l'objet
    obj.dessine();
     
    glPopMatrix();
     
     
    glTranslatef(tx,ty,tz); // translation utilisateur
     
    swapbuffer();

  4. #4
    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
    non il faut mettre le glRotate ET le glTranslate avant de dessiner l'objet mais je sait plus si il faut mettre d'abord la rotation puis la translation ou l'inverse...

    je croit que c'est d'abord la translation puis apres le rotation a cause de l'ordre de multiplication des matrice
    * 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

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 87
    Par défaut
    ce qui me gène dans l'exemple c 'est le loadIdentity après le pushMatrix().

    ca re-init pas a zéro les transformation ? donc on revient a l'origine non ?

  6. #6
    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
    oui justement ton objet sera initialisé a 0, tu realise tes transformations et tu l'affiche puis u revient dans l'etat precdent (celui de la camera) avec le popMatrix()
    * 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

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 87
    Par défaut
    bon j'ai essayer ta technique bafman mais ya un petit foirage.

    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
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
     
    	// déplace le point de vue (nécessaire en mode perspective)
    	if (modeProjection == PERSPECTIVE) {
    		if (loader.fileLoaded)
    			glTranslatef(0.0,0.0,-loader.maxSize);
    		else
    			glTranslatef(0.0,0.0,-25.0);
    	}
     
    	glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
     
     
    	glTranslatef(tx, ty, tz);	// translation XY de la vue
     
    	glColor3f(0.0f,0.0f,0.0f);
     
    	// dessine l'origine du repère globale :
    	dessineRepere();
     
    	glPushMatrix();	// sauvegarde la matrice
     
    	glLoadIdentity();	// re-init les transformations
    						// on est maintenant dans le repère local de l'objet
    						// où l'origine est son centre de gravité
     
    	// translation au centre de la tôle
    	if (loader.fileLoaded){
    		glTranslatef(loader.center.x, loader.center.y, loader.center.z);
    	}
     
    	glMultMatrixf(rotMatrix);	// applique la rotation
     
     
    	// dessine le tracé
    	if (loader.fileLoaded) {
    		if (isOnSimulation)
    			loader.drawSimulation(currentInstruction);	// dessine jusque l'instruction courante
    		else
    			glCallList(loader.listID);		// tracé par liste d'affichage
    	}
     
    	glPopMatrix();
    swapBuffer();
    mais l'origine de l'objet est translaté au centre de gravité de l'objet, or c 'est pas le but . L'objet garde sa position par rapport a l'origine, c'est juste le centre de rotation qui doit changer (barycentre de l'objet au lieu de l'origine)

  8. #8
    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
    essaie en effectuant une translation pour placer le centre de la rotation en 0,0,0 avant de faire les autre transformations.
    * 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

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 87
    Par défaut
    je viens de penser à un truc :

    ça serais pas plus simple si les coordonnées de mon objet était exprimé dans le repère local de l'objet plutot que dans le repère monde ?

    parce que la le soucis c'est que les coordonnées sont exprimés par rapport à 0,0,0.

    étant donné que mon objet est exprimé dans le repère globale, mieux vaut le translater a l'origine et effectué ensuite les rotations et translation, non ?

  10. #10
    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
    oui c'est nettement mieux...
    * 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

Discussions similaires

  1. [PERL] transformation de fichier
    Par bob20000 dans le forum Langage
    Réponses: 6
    Dernier message: 27/07/2006, 11h13
  2. transformer un fichire Xml en pdf
    Par SuperFoustan dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 21/02/2003, 11h45
  3. transformer un jour en JJ/MM/AA
    Par gemini_010 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 08/11/2002, 22h55
  4. Transformer un caractère en type énuméré
    Par HT dans le forum Langage
    Réponses: 3
    Dernier message: 22/10/2002, 20h46
  5. FFT(Fast Fourier Transform)
    Par IngBen dans le forum Traitement du signal
    Réponses: 6
    Dernier message: 23/05/2002, 16h35

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