Bonjour à tous.
Je sèche sur la compréhension de deux fonctions de la classe utils : MatrixToRotAxis() et son inverse RotAxisToMatrix().
Ces deux fonctions prennent (ou renvoient) en paramètres d'une matrice, un vecteur v (axe de rotation) et un réel w (angle de rotation).
Je n'arrive pas à comprendre ce que représentent ces deux paramètres.
Autant les fonctions MatrixToHPB ou HPBToMatrix ne me posent pas (plus) trop de problème, autant les deux précédentes sont absconses.
Si vous avez une explication, je suis preneur.
Par avance, merci
Axe de rotation + angle W en general c'est la représentation d'un quaternion.
Tu fais tourner un objet de x degrés (w) autour d'un axe qui lui peut être orienté n'importe comment.
Effectivement, il s'agit bien de cela.
J'ai mis quelque temps à le mettre en pratique, mais maintenant ça va. Pas toujours simple de décoder la doc de Maxon.
Merci Floc.
Je suis pas sûr que ce soit juste ça, les quaternions, j'ai constaté que c'était justement pas simplement un vecteur + une rotation. : p
Je vous conseille un petit lien très utile pour comprendre la conversion et les différences entre les matrices, le combo angles + rotation, les quaternions et les angles d'Euler :
http://www.euclideanspace.com/maths/...nion/index.htm
http://www.euclideanspace.com/maths/...ions/index.htm
Perso je trouve que manipuler les rotations avec des matrices est plus simple, dès lors que tu comprends qu'une matrice représente les 3 axes avec 3 vecteurs, plus une translation, dans le cas des matrices de C4D, et qu'en multipliant une matrice par une autre, t'appliques la rotation de l'une sur l'autre.
C'est d'ailleurs comme ça qu'on peut faire marcher les rotations en OpenGL, où plusieurs couches de matrices sont empilées pour changer de repère (glPushMatrix et glPopMatrix, pour ceux qui veulent faire des recherches).
Dernière modification par César Vonc ; 23/03/2017 à 22h57.
Tu peux faire une rotation sur un seul axe à la fois. Autour de l'axe X, Y ou Z. Jamais deux à la fois. C'est pour ça qu'il y a un ordre de rotation. (qu'on peut définir dans c4d)
Si tu veux faire une rotation d'une matrice autour d'un axe autre, il faut aligner un des axe x, y ou z (en général z) sur l'axe autour duquel tu veux tourner. Faire ta rotation puis revenir.
Pour aligner ta matrice sur l'axe autour duquel tu veux tourner il faut appliquer des matrices de rotations qui te servent pour revenir (matrices inverses)
Tu peux constater que ça fait plusieurs opérations, du coup avoir une fonction qui le fait c'est bien mieux.
j'ai trouvé cette ressource en anglais la troisième vidéo est l'explication de ce que je viens de dire.
https://www.youtube.com/playlist?lis...kAtcUVgmzdAP8g
enfin si j'ai bien tout compris T.T
Apparemment l'avantages des quaternions est de permettre de passer d'une orientation à une autre de façon douce en évitant les problème de retournement, d'ordre de rotation, de gimbal etc...
Enfin un truc du genre
Alors justement... j'ai un vrai problème avec les retournements et c'est cela que j'essaie de traiter en étudiant toutes les possibilités de rotation offertes par le SDK.
Petit résumé du problème que je rencontre actuellement :
Au passage de la verticale, les liens supérieurs et inférieurs se retournent. Je deviens fou, ça fait des jours et des jours que je cherche à résoudre ce problème, sans trouver une cohérence à la façon dont ce retournement s'opère. Les axes HPB peuvent s'inverser l'un l'autre et bien que le résultat soit prévisible, la façon dont les axes vont s'imbriquer entre eux ne l'est pas. Pour l'heure j'utilise les fonctions de rotation autour des axes, mais je vais aussi essayer MatrixToRotAxis aujourd'hui.
Merci à César pour ce lien, (même si je l'ai déjà en référence) et à Valkaari pour cette chaîne. Je m'y plonge, et espère solutionner ce problème.
PS : je viens d'étudier cette vidéo, c'est redoutablement clair. Cet intervenant explique remarquablement, avec un anglais facilement compréhensible. L'opérateur caméra, en revanche, aurait du faire un peu plus de géométrie, lui.
Dernière modification par Condor34 ; 24/03/2017 à 11h18.
Au risque de paraître stupide,
Pourquoi tu t'acharnes sur du python pour un truc qui peut se régler avec des tags cibles ?
Edit : je n'est jamais rencontré de problème de fluidité avec les cibles (j'avais fait toute une colonne vertébrale mécanique sur ce principe) , mais tout le reste est très vrai et je comprend tes motivations
Dernière modification par druide ; 24/03/2017 à 20h44.
Semi-nudistes Marathoniens et Campagnards
Absent, quand je ne suis pas là.
Merci aux modos pour tout et tous.
Ouille, des tags cibles ?
Aucune fluidité, des saccades dans l'animation, des priorités complexes à gérer... et des contraintes à ajouter !
Non, quelques lignes de codes et l'affaire est réglée, propre.
En plus un noeud python est réutilisable dans toute autre configuration similaire.
Une triangulation, en modélisation mécanique c'est presque une confrontation quotidienne. Avoir un outil fait une bonne fois pour toute plutôt qu'à chaque fois refaire des tags cible et des contraintes.
Le vrai problème consiste à comprendre ce qui est proposé dans l'API et donc le fonctionnement intrinsèque de C4D et de la théorie matricielle et vectorielle qui va avec.
Faut la foi, mais tu sais Druide que je suis persévérant. Et accessoirement, revenir aux cours de seconde/première, ça fait comprendre que si on avait eu de tels outils à l'époque, les cours de math et physique auraient été un plaisir plutôt qu'un passage obligé. Mais tout ceci sort du strict cadre de C4D.