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

Moteurs 3D Discussion :

[MATH] Matrice de changement de repère.


Sujet :

Moteurs 3D

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 44
    Points : 38
    Points
    38
    Par défaut [MATH] Matrice de changement de repère.
    Bonjour,

    Je suis en train de faire un petit programme de raytracing et j'ai un petit problème pour le lancé des rayons : Je n'arrive pas à aligner mon ecran avec la direction de la camera.

    En fait, je voudrais créer un nouveau repère dans lequel l'axe z' correspondrai à la direction (D) de la camera mais je ne vois pas comment faire.

    En fait je veux determiner la matrice M tel que

    R' = M.R

    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
         1 0 0
    R =  0 1 0
         0 0 1
     
    et
         ? ? Dx
    R' = ? ? Dy
         ? ? Dz
    J'ai regardais dans la faq mais je n'ai pas trouvé comment faire. Je sais que M doit etre le produit de plusieurs matrice de rotation mais je n'arrive pas à les trouver.

    Si quelqu'un a une idée.

    Merci

  2. #2
    Membre éclairé
    Avatar de N_I_C_S
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 450
    Points : 681
    Points
    681
    Par défaut
    Salut,

    si R' = M.R doit être ton nouveau repère orthonormé classique, je pense que tu as plutôt besoin de M-1 (euh, matrice inverse de M ), cad celle par laquelle tu pourra multiplier toute ta scène dans R pour la retrouver dans R'.
    Par exemple, si tu veux baisser la caméra de 20 deg. et la tourner à droite de 40 deg., tu multiplieras toute ta scène par la matrice [gauche 40 deg. haut 20 deg.]. Et l'écran sera aligné avec le nouveau repère.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Rappels d'algèbre matricielle
    Ca peut servir à d'autres :

    On souhaite trouver une matrice M telle que :
    R' = M . R

    C'est à dire, une matrice M permettant d'écrire un vecteur exprimé dans la base R, dans la base R'.

    Pour cela multiplions à droite par 1/R (en supposant R inversible, ce qui est acquis si R est une base) :
    R' . 1/R = M . R . 1/R

    Après simplification (R . 1/R = IId) :
    M = R' . 1/R

    Pour écrire les vecteurs exprimés dans la nouvelle base vers la première base, reprenons l'hypothèse initiale :
    R' = M . R

    Multiplions à gauche par 1/M, et après simplification (1/M . M = IId) :
    R = 1/M . R'

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 72
    Points : 62
    Points
    62
    Par défaut
    bonjour, et merci pour ces precisions.

    je voulais etre sur de la methode pour calculer les reperes R et R' :
    je pars du noeud, et je multiplie les matrices de transformation jusqu'a la racine, ou l'inverse : je pars de la racine et je multiplie jusqu'au noeud ?

  5. #5
    Membre habitué 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 : 41
    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
    Points : 177
    Points
    177
    Par défaut
    Si j'ai bien compris le problème ...
    Quand on définit le volume de vision avec gluPerspective, les valeurs du Znear et Zfar doivent être positives, et gluPerspective les inverse.
    Ce qui fait que le volume de vision est dirigé par défaut vers les Z négatifs, contrairement au repère objet de la caméra qui lui à son Z dans le même sens que l'axe Z du repère scène.

    Du coup ça fait que la camera "regarde" dans la direction de ses Z négatif.
    La solution est donc de faire un changement de repère, juste en inversant l'axeZ avant de faire toute autre chose. La camera regardera dans le bon sens !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    glClear(...);
    glLoadIdentity();
    float changement_repere[16] = {
    1., 0., 0., 0.,
    0., 1., 0., 0.,
    0., 0., -1., 0.,
    0., 0., 0., 1.}
    glLoadMultMatrixf(changement_repere);
    Le point de visée de ta camera sera maintenant le point que pointe le vecteur Z du repère objet de la camera.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    J'ai lu dans les FAQ que la matrice correspondant à un système de coordonnées (O, i, j, k ) est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	xi	xj	xk	0
    	yi	yj	yk	0
    	zi	zj	zk	0
    	0	0	0	1
    Je voudrais utiliser cette propriété pour calculer une matrice de changement de repère, mais je rencontre le problème suivant:

    Le repère de base est ( O, i, j, k ) avec O( 0, 0, 0 ), i( 1, 0, 0 ), j( 0, 1, 0 ) et k( 0, 0, 1 ). Cela fait donc la matrice:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	1	0	0	0
    	0	1	0	0
    	0	0	1	0
    	0	0	0	1
    Jusque là, tout va bien.

    Le nouveau repère est ( O', i', j', k' ) avec O'( xo', yo', zo' ), i'( xi', yi', zi' ), j'( xj', yj', zj' ) et k'( xk', yk', zk' ).
    J'ai pris soin de choisir i', j' et k' normalisés.

    - Première question: comment matérialise-t-on O'. Est-ce de cette manière?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	xi'	xj'	xk'	-xO'
    	yi'	yj'	yk'	-yO'
    	zi'	zj'	zk'	-zO'
    	0	0	0	1
    L'idée étant d'appliquer une translation, vous l'aurez remarqué.


    - "la matrice de rotation peut être calculée via la multiplication de la matrice finale avec l'inverse de la matrice de départ." (cf.FAQ)
    Ok, donc on multiplie la matrice M' de ( O', i', j', k' ) par l'inverse de la matrice M de ( O, i, j, k )
    Or, l'inverse d'une matrice identité est la matrice identité, donc il s'agit de multiplier M' par la matrice identité, ce qui revient à M'

    De ce fait, me suffira-t-il donc de transformer P( xp, yp, zp ) de ( O, i, j, k ) pour obtenir ses coordonnées dans ( O', i', j', k' ) ?

  7. #7
    Candidat au Club
    Inscrit en
    Novembre 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour à tous,

    v3nu5, la réponse a tes questions m'intéressent également
    Est-ce que tu étais sur la bonne voie ?

    Merci !
    Lokkook

Discussions similaires

  1. Matrice rotation, changement de repère
    Par stick25 dans le forum MATLAB
    Réponses: 5
    Dernier message: 03/06/2010, 18h53
  2. Réponses: 9
    Dernier message: 26/02/2009, 01h14
  3. libriraies math (matrices et methodes numeriques)
    Par samir2005 dans le forum MFC
    Réponses: 4
    Dernier message: 13/11/2005, 16h44
  4. URGENT : Zoom et changement de repère
    Par poca10 dans le forum MFC
    Réponses: 5
    Dernier message: 28/05/2002, 14h32

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