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

Développement 2D, 3D et Jeux Discussion :

[3D] Gimbal Lock


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut [3D] Gimbal Lock
    Le problème de la perte d'un degré de liberté, le gmbal lock, arrive quand on utilise les angles d'Euler. Comme la matrice de rotation finale dépend de l'ordre des multiplications, il est possible que parfois, l'une des rotations autour d'un axe soit confondue avec un autre axe de rotation.

    Pire encore, il est devient parfois impossible de tourner l'objet suivant un certain axe. C'est le gimbal lock !

    Par exemple, supposons qu'un objet est tourné dans l'ordre Z, Y et X et que la rotation autour de Y soit de 90°.

    Dans ce cas, la rotation suivant Z se fait correctement, puisque c'est la première. L'axe Y tourne également correctement. Néanmoins, après cette rotation, l'axe X et l'axe Z sont confondus.

    Du coup, toutes rotation autour de l'axe X tourne l'objet suivant Z ! Pire encore, il est devenu impossible de tourner l'objet autour de l'axe X.
    J'avoue avoir du mal à saisir la définition du Gimbal Lock de la FAQ et surtout en quoi on perdrait un degrés de liberté !

    J'ai trouvé cet exemple en trainant sous Google :

    Imagines un vecteur parrallèle à l'axe des X, fais une rotation de ce vecteur autour de l'axe des Y pour qu'il devienne parrallèle à l'axe des Z. Alors une rotation autour de l'axe des Z n'a plus d'effet, tu viens de perdre un degré de liberté (plus que 2 axes de rotations qui fonctionne) : c'est le gimbal lock.
    En quoi une rotation autour de l'Axe des Z n'aura plus d'effet ? Dans mon esprit, le vecteur est effectivement parallèle à l'axe des Z mais je ne vois pas en quoi cela gène. On peut toujours tourner autour de l'axe Z dans ma tete Parce que si on prend depuis le début, le vecteur était parallèle à l'axe des X et ça ne nous géner en rien, alors pourquoi la en Z ça nous gène

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Tout se trouve pourtant dans le texte...

    Comme la matrice de rotation finale dépend de l'ordre des multiplications
    C'est à dire: on va d'abord faire la rotation par rapport au premier angle, ensuite le 2ème enfin le 3ème...

    Par exemple, supposons qu'un objet est tourné dans l'ordre Z, Y et X et que la rotation autour de Y soit de 90°.
    Donc on fera une rotation par rapport aux Z, ensuite 90 degrés par rapport au nouvel axe Y et enfin la rotation par rapport au nouvel axe X.

    Je parle de nouvel axe puisqu'on part avec 3 axes (x,y,z) et lorsqu'on fait la première rotation par rapport aux Z, on obtient 2 nouveaux axes x' et y' qui sont les rotations des axes de départ x et y par rapport à z.

    Ensuite on fait une rotation par rapport au nouvel axe y' et non y puisqu'on fait une rotation avec les angles d'euler. Donc l'axe x' va devenir colinéaires au z et z va bouger de 90 degrés aussi.

    Lorsqu'enfin vient le tour de faire la rotation par rapport aux x, on remarque que l'axe est colinéaire au z de départ. Donc finalement, on ajoute une rotation par rapport au z.

    On a perdu une dimension. Notre rotation revient à faire une rotation par rapport aux z, une par rapport aux y et de nouveau une par rapport aux z... Les x ont disparus...

    Ai-je été plus clair?

    Jc

  3. #3
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut
    Bon, bon essayons d'éclaircir tout ça Je comprends tout a fait que la matrice de rotation finale dépend de l'ordre des multiplication. Selon l'ordre le résultat sera différent car la multiplication matricielle n'est pas commutative, j'ai juste ?

    Essayons de prendre comme API pour exemple OpenGL, je lis de partout qu'il est dangereux de travailler avec glRotate (pour cause de gimbal lock) qui se base sur une transformation d'Euler en associant un angle à un axe de rotation (ici un vecteur passant par l'origine).

    La ou je décroche c est que tu me dis qu'on obtient de nouveaus axes une fois une rotation par Z effectué par exemple.
    Si dans mon progamme OpenGL je fais un truc dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    glRotatef(90.0f,0.0f,1.0f,0.0f);
        glRotatef(45.0f,0.0f,0.0f,1.0f);
     
        glutSolidTeapot(3);
    Selon le résultat visuel, et les constatations, les rotations se font à chaque fois selon le repère global et non pas un nouveau repère (local ?) de l'objet suite à une première transformation.

    Je vois que c est vraiment pas trés clair dans ma tête
    Le programmeur n'est il pas justement sensé maitriser l'ordre dans lequel sont effectuées les combinaisons matricielles ?

    En fait je pense qu'il me manque un code, un visuel, quelque chose de concret pour vraiment saisir le problème. Il faudrait que j'arriver à simuler un gimbal lock.

  4. #4
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Zoso_
    En fait je pense qu'il me manque un code, un visuel, quelque chose de concret pour vraiment saisir le problème. Il faudrait que j'arriver à simuler un gimbal lock.
    Et ben, fallait juste demander, voici un code qui le montre. On fait une rotation de 20 par rapport aux X, 90 par rapport aux Y et lorsqu'on arrive aux Z on fait -20, cela revient au final à faire une simple rotation par rapport aux Y...

    Je joins aussi les images, regarde le titre de la fenêtre pour voir les rotations faites...

    Jc
    Fichiers attachés Fichiers attachés

  5. #5
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut
    Merci Fearyourself, je commence à comprendre

  6. #6
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut
    J'ai implémenté un petit soft qui me permet de déplacer une teillère et je suis trés vite tombé dans le problème de la perte de liberté, la rotation autour de x était confondue avec z. Donc de ce coté tout va bien

    Avant de mettre le tag résolu, il faut que j'arrive à cerner comment les Quaternions permettent de résoudre ce problème de "perte de liberté".

    Les Quaternions, c'est un corp complexe associatif mais non commutatif. De ce fait l'ordre dans lequel nous allons multiplier les Quaternions entre eux est important non ? Donc on en revient toujours au problème del'ordre de combinaison des transformations.

  7. #7
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Zoso_
    Avant de mettre le tag résolu, il faut que j'arrive à cerner comment les Quaternions permettent de résoudre ce problème de "perte de liberté".

    Les Quaternions, c'est un corp complexe associatif mais non commutatif. De ce fait l'ordre dans lequel nous allons multiplier les Quaternions entre eux est important non ? Donc on en revient toujours au problème del'ordre de combinaison des transformations.
    Non parce que l'utilisation des Quaternions permet de faire une seule rotation sur les trois axes en même temps...

    Voir la FAQ, y a pleins d'infos dessus:
    http://jeux.developpez.com/faq/matqu...uaternions#Q47

    Jc

  8. #8
    Membre chevronné
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Par défaut
    Ok, merci pour tout

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

Discussions similaires

  1. Gimbal Lock fix
    Par roxtar dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 20/06/2012, 09h42
  2. Gimbal Lock fix
    Par roxtar dans le forum API graphiques
    Réponses: 0
    Dernier message: 18/06/2012, 22h41
  3. [Débutant] Plan moindre carré, Gimbal lock !
    Par labmat dans le forum MATLAB
    Réponses: 3
    Dernier message: 30/04/2011, 17h00
  4. Le Gimbal lock
    Par Deeprod dans le forum Développement 2D, 3D et Jeux
    Réponses: 6
    Dernier message: 17/04/2007, 10h13
  5. Row lock
    Par cassandra dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 09/04/2003, 16h07

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