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 :

Translation et retour de l'origine du repère à sa position initiale


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    lia
    lia est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 59
    Par défaut Translation et retour de l'origine du repère à sa position initiale
    Bonjour,

    J'ai une scène dans laquelle j'ai 2 objets, disons pour simplifier un cube et une boule.
    Il est possible de faire des translations et rotations (par rapport au centre de la boule) qui s'appliquent à toute la scène, à l'aide de la souris (les deux objets subissent les translations et rotations de toute la scène). Le cube peut, en plus, avoir sa propre translation indépendamment de la scène.

    Pour la scène et le cube, je stocke des translations et rotation "cumulées" que je mets à jour à chaque mouvement de souris.

    Si le cube ne translatait pas indépendamment de la scène, cela reviendrait au problème du mini système solaire dans le redbook, et jusque là tout va bien. Mon problème est que la translation du cube seul déplace aussi l'origine du repère et à la boucle d'affichage suivante, la rotation se fait à la nouvelle origine (celle résultant de la première translation). Donc le centre de rotation du cube est décalé en fonction de sa propre translation.

    Est-ce qu'il y a un moyen de garder le centre de rotation au centre de la boule, indépendamment des transformations du cube?

    Je mets mon "code" à la fin du message.

    Merci beaucoup d'avance.

    lia

    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
     
        glPushMatrix();
        {
            glMatrixMode(GL.GL_PROJECTION);
            glLoadIdentity();
            setProjection(); 
     
            glMatrixMode(GL.GL_MODELVIEW);
            glLoadIdentity();
            setCameraPosition();
            glTranslatef(sceneTranslation);  //sceneTranslation est la translation cumulée de toute la scène. Elle se répercute sur la boule est sur le cube.
     
            glPushMatrix();
            {
                glTranslatef(centre[0], centre[1], centre[2]);  // translation jusqu'au centre de la molécule pour qu'elle soit le centre de rotation
                glMultMatrixf(sceneRotationMatrix, 0);  // rotation cumulée de la scène
                glTranslatef(-centre[0], -centre[1], -centre[2]);
                drawBall();
            }
            glPopMatrix();
     
            glTranslatef(centre[0], centre[1], centre[2]);  // le centre du repère se place au centre de la molécule
     
            glPushMatrix();
            {
                 glTranslatef(cubeTranslation);  // translation cumulée du cube. C'est cette ligne qui décale tout.
                 glMultMatrixf(sceneRotationMatrix, 0);  // la même que celle de la scène mais est amenée à être différente elle aussi
                 drawCube();
            }
            glPopMatrix();
        }
        gl.glPopMatrix();
        ...
    }

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 131
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Je crois qu'en appliquant la translation du cube au tout début (avant toutes les autres transformations de scène) permettra de faire ce que vous voulez.
    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.

Discussions similaires

  1. [SAX] Echappement et retour a l'original
    Par epiph dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 07/10/2010, 07h52
  2. Placer l'origine d'un repère à l'extérieur d'une image
    Par chevalvapeur dans le forum Images
    Réponses: 5
    Dernier message: 27/11/2009, 11h13
  3. [Débutant]-Changement d'origines du repère orthonormé
    Par mostafaziad dans le forum MATLAB
    Réponses: 4
    Dernier message: 09/07/2007, 15h51
  4. Retour ou non vers le répertoire d'origine.
    Par troumad dans le forum C
    Réponses: 2
    Dernier message: 18/04/2007, 17h48
  5. Retour à l'enregistrement d'origine avec s-form
    Par lemiref dans le forum IHM
    Réponses: 9
    Dernier message: 02/12/2005, 21h32

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