Jusq'à présent, les transformations dans Orion3D étaient gérées de manière assez spéciale : on avait une matrice statique et une matrice d'anim, et la matrice finale était égale à statique * animation (j'omet la hiérarchie pour simplifier). Vu qu'une matrice permet de représenter en même temps la position (P), la rotation (R) et le scale (S), d'un objet, je me permet de développer:
 
M = ( Ps & Rs & Ss) * (Pa & Ra & Sa)
 
(les opérateurs sont là pour faire joli)
Or dans 3DS (et probablement dans pas mal de moteurs 3D, Sanx et Pierre ?), c'est calculé comme ça :
M = ( Ps + Pa ) & ( Rs * Ra ) & ( Ss * Sa )
 
Pour l'instant, on avait "résolu" le problème au moment de la récupération des anims depuis 3DS dans le plug-in, en prémultipliant les keyframes par des matrices adaptées (on s'était d'ailleurs bien pris le chou, je crois me souvenir de certaines séances de torture intellectuelle avec gab pour faire marcher le tout).
Donc bon ça marche dans la plupart des cas, mais par exemple si l'objet a une anim de rotation et de scale, le scale ne sera pas pris dans le même repère que 3DS, enfin bref c pas top. Alors sûrement qu'il y a une preuve mathématique comme quoi on peut faire exactement la même chose avec les 2 méthodes, et qu'il suffit d'avoir les bonnes matrices & co, mais ca serait pas plus pratique de plutôt passer au mode "PRS" comme MAX et de plus se prendre le chou ? D'autant plus que pour l'animation blending, ca va être encore plus le bordel. Donc là j'ai commencé à passer à l'autre mode, mais bon je pose la question au cas où il y aurait un détail particulier auquel je n'aurais pas pensé.
 
Autre chose : les fonctions de mouvement des OR_Object (translate, rotate, et cie) sont toutes en virtual, et certaines sont overloadées (par exemple dans OR_Camera). Je pense pas que ça soit une bonne idée : si on veut déplacer un objet, on sait pas quel sera le résultat suivant son type, c'est totalement déroutant, et bien sûr ça ralentit là où on pourrait mettre du inline. Il vaut mieux que tous les objets se comportent de façon identique au niveau de la transformation, et si on veut avoir des fonctions de transfos supplémentaires dans certains objets, il suffit de les ajouter, et y'aura qu'à faire un cast pour pouvoir les utiliser (ou tout simplement on rajoute plus de fonctions dans OR_Object, genre RotateAroundLocalAxis et RotateAroundGlobalAxis, plutôt qu'un Rotate qui va tourner autour du global pour un objet sauf pour une caméra où ça sera autour du local...).
 
Voilà c'est fini pour aujourd'hui merci pour les gens qui ont lu jusqu'au bout, hésitez pas à commenter :)
 
Antoche
 
PS : c'est le gros bordel à l'esiee, le service informatique est dans l'anarchie, donc j'en profite quand j'ai un coin de net ;) Normalement j'ai l'ADSL dans 10 jours
PPS : bonnes vacances gab ;)