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

DirectX Discussion :

rotation par rapport à un point


Sujet :

DirectX

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 5
    Points : 1
    Points
    1
    Par défaut rotation par rapport à un point
    est-il possible d'effectuer une rotation par rapport à un point sans utiliser
    D3DXMatrixAffineTransformation, mais en décomposant le mouvement
    en une rotation dans le repère local à l'objet + une translation?

    merci

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Je ne sais pas si j'ai bien interpréter la question mais effectué une multiplication de ta matrice world par une

    matrix.rotationYawPitchRoll(angle,angle,angle)

    te permet de faire une rotation suivant les trois axes donc par rapport a un point.

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Non, désolé, mon pb est plus complexe que ça.
    J'ai un objet qui a déjà subi plusieurs transformations (translation + orientation) auquel j'applique une nouvelle transformation :
    une rotation d'angle alpha par rapport à un point 3D quelconque de la scène. J'ai donc 1 orientation (R1) + 1 translation (T) + 1 rotation par rapport à un point (R2). Ma question est : connaissant ces transformations, puis-je les exprimer comme étant une translation + une orientation?

    M = R1 * T * R2
    Translation => triviale : D3DXVec3transformCoord(nouvelle position, position avt R2, M)
    Orientation ?????????????????

  4. #4
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    est-ce que tu sais ce qu'est l'algebre linéaire ?

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Ca ne m'aide pas ce genre de réponse...
    Si tu maitrises le sujet, peux-tu me dire seulement si c'est possible?

    thx!

  6. #6
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Ben ça t'aide peut-etre pas, mais nous ça nous aide à situer un peu ton niveau et tes connaissances avant de te répondre.

    En gros chaque étape de transformation est une assiette d'une pile de matrice (matrices 4x4 pour tenir compte des translations évidemment). la transformation finale est une matrice 4x4 également qui est la concaténation de toutes les matrices de ta pile, par le biais d'une multiplication de ces matrices dans l'ordre de ta pile.

    Donc si tout ce qui t'interesse c'est la position finale de ton point dans ton repère écran, tu te fiches de savoir à quel translation + rotation est équivalente ta matrice finale, puisque la seule connaissance de ta matrice te permet de déterminer ta position finale.

    Sinon si tu as VRAIMENT besoin de cette information, un peu de géométrie dans l'espace ça aide beaucoup. En gros toute rotation par rapport à un point C
    selon l'angle Theta et axe u, est déterminée géométriquement par :
    translation par le vecteur CO (pour se ramener dans le repere local à C),
    rotation selon l'angle Theta et axe u, translation par le vecteur OC (cela revient à dire que le point C est invariant).
    Tu peux traduire ça comme une simple rotation (centrée en 0) suivie d'une translation.
    Rotation de centre O, angle theta et axe u, et translation de C'C (C' est l'image de C par la première rotation, cela revient à dire encore une fois que C est invariant).

    Et voilà.

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci bcp pour ta réponse car j'ai VRAIMENT besoin de ces infos... (C'est pour stoquer les transfos dans des fichiers et je ne peux pas changer la manière d'enregistrer ces infos).

    Le problème est que j'ai déjà essayé d'effectuer ma rotation centrée en O (pour reprendre tes notations) puis ma translation C'C et effectivement ça fonctionne... mais uniquement quand mon objet n'a pas subi d'autre rotation auparavant. C'est certainement moi qui fait une erreur mais je ne parviens pas à déterminer la rotation en O qui correspond à ma première rotation plus celle par rapport à C.

    Bon, promis c'était le dernier post à ce sujet, après je me débrouille tt seul...

  8. #8
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    ben une composition de deux rotations c'est toujours une rotation.
    Et une translation suivie d'une autre translation c'est toujours une translation.

    Donc si ton objet a déjà subi des transfos avant, ben tu appliques le meme raisonnement pour determiner la translation et la rotation associé à la combinaison des deux.

    rotation finale = combinaison de toutes les rotations
    translation finale = ton point O doit se trouver en O'.. etc..

    Sinon, tu peux extraire ces infos facilement de ta matrice concaténée..

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    "Sinon, tu peux extraire ces infos facilement de ta matrice concaténée.."

    Je viens de faire le tour de la question et c'est le plus simple pour moi...
    Si j'appelle matWorld ma matrice concaténée (je suis en repère 'main gauche'), alors:

    translation = (matWorld._41, matWorld._42, matWorld._43)

    mais je ne sais pas récupérer mes angles de rotation...
    en l'occurrence, l'ordre des rotations est déteminente (je fais 2 'yawpitchroll' successifs soit dans l'ordre : R1y , R1x , R1z, R2y , R2x , R2z), mais l'expression de la matrice concaténée en fction de ces transfos est infame donc pour en déduire 3 angles de rotation .

    voili, voilou...

Discussions similaires

  1. [Débutant] Centrer un texte par rapport à un point.
    Par pyngux dans le forum C#
    Réponses: 3
    Dernier message: 22/05/2014, 11h49
  2. Rotation par rapport à la souris
    Par Metaten dans le forum XNA/Monogame
    Réponses: 2
    Dernier message: 14/01/2013, 13h32
  3. [MySQL] Afficher le rang de l'utilisateur par rapport à ses points
    Par stevench dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 24/08/2012, 16h30
  4. [Turbo Pascal] Coupe de football : afficher le 1er et le 2ème par rapport aux points
    Par jombo dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 29/03/2012, 13h54
  5. [MATH] Point par rapport à une droite
    Par teska dans le forum Mathématiques
    Réponses: 6
    Dernier message: 14/05/2003, 16h11

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