Besoin d'aide / -> opérations matricielles pour position miroir d'un point dans
kiteman
Messages postés4Date d'inscriptionlundi 2 août 2004StatutMembreDernière intervention 4 décembre 2008
-
3 déc. 2008 à 21:22
kiteman
Messages postés4Date d'inscriptionlundi 2 août 2004StatutMembreDernière intervention 4 décembre 2008
-
4 déc. 2008 à 01:15
Bonjour , je suis nouveau ici .
Je suis pas vraiment programmeur ( je suis infographiste (animateur 3D) ) .
J'apprends ces jours ci un language spécifique de mon logiciel de travail (cinéma4D) , basé sur le C++ afin de developper des petits plugins pour améliorer mon ergonomie de travail ..
bon je galère un peu ^^ mais ça va j'apprends.
Donc je viens vous demander de l'aide car , je souhaiterais me faire un 1er plugin qui me permettrait de faire rapidement des poses mirroirs de personnages , en agissant sur les controlleurs du personnage , et en les mirroirant selon un axe choisis .Le problème est que je galère à trouver la formule mathématique qui me permettrait de donner la position et rotation d'un point dans l'espace , en mirroir , par rapport un plan .
donc imaginons un objet A ( cube vert sur l'image ) , un objet M servant d'origine et sur lequel on choisit l'axe de mirroir (ici l'objet 'nul' symbolisé par le plan blanc )
et un objet B ( cube rouge ) . Je veux que cet objet B soit le symétrique de A sur l'axe Z de l'objet M ( donc son plan XY) . (j'ai triché sur l'image , c'est pour ça que ça semble syméytrique ^^ )
J'ai accès aux matrices locales et globales , aux positions/rotations locales et globales de chaque objet . J'ai tous les noueds mathématique pour les opérations d'algèbre et de conversion diverses .. mais il me manque juste la bonne formule pour trouver , par les matrices globales et/ou les positions et rotations globales , ce calcul automatique de mirroir :(
donc les matrices de chaque objet me donnent ( V0 V1 V2 V3 ) [avec V0 la position dans l'espace (vecteur ) .. V1 V2 et V3 les vecteurs définissant la rotation du repère de l'objet dans l'espace .
voila avez-vous des idées ? merci d'avance si vous pouvez aider un nulos en maths comme moi ! :)
++
clément
A voir également:
Besoin d'aide / -> opérations matricielles pour position miroir d'un point dans
kiteman
Messages postés4Date d'inscriptionlundi 2 août 2004StatutMembreDernière intervention 4 décembre 2008 3 déc. 2008 à 21:26
ici un autre exemple (truqué biensur ) de l'effet mirroir voulu avec cet objet M origine du mirroir , déplacé et tourné un peu dans l'espace . on voit bien que le cube rouge est le "reflet" du cube vert , sur le plan YX de l'objet M ( plan blanc ) :
kiteman
Messages postés4Date d'inscriptionlundi 2 août 2004StatutMembreDernière intervention 4 décembre 2008 3 déc. 2008 à 21:34
(désolé je vois pas où éditer mes messages :( .. alors je poste à la suite )
Voila ici , l'interface de mon plugin ( si j'y arrive ^^ ) . Programmé en c++ via un editeur spécial dans le logiciel .
donc le principe est assez simple je pense : on drag & drop nos controlleurs dans les liens .. on choisit lesquels on veut pour l'effet mirroir ( donc on active ou non les "checkbox' ) .. on drag and drop le controlleur ou objet servant d'origine au plan mirroir ...on choisit l'axe via le petit menu déroulant .. et puis on a les boutons d'actions : mirroir des élements selectionnés ( checkbox ) .. et/ou stockage de la pose ( j'ai mis 3 boutons car je n'ai pas besoin de plus généralement ) pour pouvoir se déplacer dans l'animation (dans le temps ) et pouvoir reinjecter la pose .
kiteman
Messages postés4Date d'inscriptionlundi 2 août 2004StatutMembreDernière intervention 4 décembre 2008 4 déc. 2008 à 01:15
ok ayé trouvé ! :D (grace à un ami qui m'a mis sur la piste des multiplications de matrices et des inversions .
donc ici en gros j'ai:
(matrice globale de A * (invert(matrice globale M )) j'obtient un premier croisement matriciel [ appelons-le M1] auquel je multiplie (1,1,-1) (car je veux une sym sur Z ) à V0 V1V2etV3 .. puis je remultiplie [en croisé] ( matrice globale M ) * (matrice M1) ... et cette matrice résultante , je l'injecte dans mon cube rouge , en entrée 'matrice globale'