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 :

Ordre dans la multiplication des matrices


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Par défaut Ordre dans la multiplication des matrices
    Bonjour!
    J'espère que ma question n'a pas déjà été posée. En fait ma question porte sur l'ordre de la multiplication des matrices avec OpenGL.

    Admettons j'ai une matrice de translation T, une matrice de rotation R. Et un point v dans l'espace. Si je veux appliquer dans l'ordre:
    1. La translation
    2. La rotation

    Je dois faire:
    T * R * v

    Mais il me semble que dans mes cours d'algèbre linéaire j'ai, pour le même ordre désiré:
    R * T * v

    J'ai essayé de trouver une raison, et j'aimerai savoir si c'est bien pour cette raison que l'ordre change. En fait dans le libre OpenGL 2.0 Le guide officiel ils insistent bien sur le fait qu'il faut voir le repère dans OpenGL comme un repère local. Du coup je me dis que c'est pour cette raison qu'il faut voir l'ordre comme étant inversé: puisque on effectue les transformations par rapport à ce repère local, et non pas par rapport à un repère global.

    C'est ça où me suis-je trompé dans mon raisonnement ?

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Par défaut
    Il se peut que je dise des betises (je me trompe toujours avec les matrices xD) donc a prendre avec des pincettes et a tester :

    Pour te simplifier la vie fais une association de l'ecriture matricielle avec celle des fonctions. Imaginons que tu aies une fonction t qui translate ton point et une fonction r qui fasse la rotation. Pour faire la translation et ensuite la rotation t'écrirais comme ca :

    r(t(p))

    Et bien en matriciel ca fait :

    r*(t*p) = r*t*p

    Mais bon si t'es en ecriture homogone (comme l'est OpenGL) tu n'as besoin que d'une matrice M pour faire une rotation et ensuite une translation (t'auras besoin de deux pour faire translation et apres rotation) :

    M = | R t |
    | 0 0 0 1 |

    ou M est une 4x4 et R une 3x3 et t une 3x1. Et ca s'applique comme ca sur le point :

    p' = M * p = R*p+t

    Mais bon apres je te laisse le soin de lire la FAQ matricielle etc.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Par défaut
    En fait, j'ai fais quelque recherches en plus, et je suis tombé sur un site qui dit:

    "La théorie dit:
    1. Si on fait les transformations par rapport à un repère global alors on pré-multiplie
    2. Si on fait les transformations par rapport à un repère locale on post-multiplie"

    Source

  4. #4
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 818
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 818
    Par défaut
    Citation Envoyé par Balmung Voir le message
    En fait, j'ai fais quelque recherches en plus, et je suis tombé sur un site qui dit:

    "La théorie dit:
    1. Si on fait les transformations par rapport à un repère global alors on pré-multiplie
    2. Si on fait les transformations par rapport à un repère locale on post-multiplie"

    Source
    Là, si tu as compris quelque chose, je suis preneur pour les explications! (à cette heure avancée de la soirée, j'ai le neurone qui fonctionne au ralenti)

    Sinon je rejoins TanEk, R*T*v... si tu veux appliquer une translation puis une rotation. Ensuite, les histoires de repères locaux et globaux, ça vient en parallèle... là, avec ta matrice R, tu fais une rotation par rapport au centre de ton repère global. Si tu veux la faire par rapport à un repère local, il faut jouer avec une translation supplémentaire (mais est-ce la même que celle de ta matrice T???)
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Voyons déjà la 'forme' des vecteurs & matrices...

    Si les vecteurs sont des colonnes...
    alors:
    X' = M * X
    et M = | R T |
    | (0) 1 |

    Dans ce cas, j'aime bien noter la transformation de repère:
    Xb = Mb<-a * Xa
    Xc = Mc<-b * Xb

    Donc: Mc<-a = Mc<-b * Mb<-a
    Pour finir avec... M = R * T


    Si les vecteurs sont des lignes... alors il faut prendre les transposées:
    X' = X * M
    M = | R (0) |
    | T 1 |

    Ma->c = Ma->b * Mb->c
    Pour finir avec... M = T * R

Discussions similaires

  1. Multiplication des matrices
    Par nadine01 dans le forum Général Java
    Réponses: 3
    Dernier message: 30/12/2014, 10h17
  2. [Débutant] la multiplication des matrices
    Par brf1982 dans le forum MATLAB
    Réponses: 6
    Dernier message: 20/10/2012, 18h35
  3. [VxiR2] Ordre dans la liste des valeurs dans une invite
    Par amy0o0 dans le forum Webi
    Réponses: 1
    Dernier message: 21/04/2011, 17h59
  4. Multiplication de matrices contenues dans des cellules
    Par jeanlourme dans le forum MATLAB
    Réponses: 1
    Dernier message: 08/05/2009, 15h32
  5. Réponses: 6
    Dernier message: 15/05/2006, 11h50

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