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
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
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.
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 ?????????????????
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
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!
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
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...
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
"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...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager