(bon, je pense pas que ca soit le meilleur forum pour ca, mais bon, sait-on jamais... Bjone, t la ?
)
Mes déboires ont commencé quand j'ai refait un système de particule pour 3ds max 5. En m'appuyant sur les samples fournis avec le maxsdk, j'ai pas eu de pb a faire mon systeme (dérivant de SimpleParticle). Les emmerdes ont commencés avec les déflecteurs. Les déflecteurs de max, appelé par le truchement de CollisionObject::CheckCollision se comportent d'une manière rendant mon systeme instable. Partant de la j'avais deux solutions : soit je refais des deflecteurs spéciaux, avec une méthodeCollisionObject::CheckCollision correspondant exactement a mes besoins. Soit je continue a utiliser ceux de max, sauf que les calculs de collision seront fait par le système. Les avantages sont moultes : pas besoin de se trimbaler force plug-in, pas besoin de réecrire lesdits plug in (ca c un sacré avantage). Bref, je me décida pour cette stratégie. Le drame survint lors de la surcharge de SimpleParticle::ApplyCollisionObject.
Tout d'abord quelque soit ce que je retourne (TRUE,FALSE) max me fait la liaison entre le déflecteur et mon systeme. Ce qui est crétin. (en suivant le code asm on s'apercoit que max ne teste meme pas le retour de fonction il ecrase EAX dans la joie et la bonne humeur a peine la fonction finie, ca vaut le coup de se prendre la tête...). Par ailleurs, il semble que max appelle cette fonction un peu n'importe comment (si on ajoute un Deflecteur, il renvoie toute la liste au lieu d'envoyer seulement le dernier. Et je n'ai pas l'impression qu'il appelle une fonction avant pour prevenir de ses magouilles...). Mais le pb n'est pas la, le pb est que CollisionObject permet seulement de recuperer un pointeur vers un Object. C'est pas mal, ca permet de recuperer les paramBlock, mais pas la matrice de transformation. Et visiblement, y'a pas moyen de passer de Object a INode (etant donné qu'un Object peut etre reference par plusieurs INode, meme la méthode gorine "cherche dans tous les nodes celui qui reference l'objet" ne marche pas. Bref, je suis face a un mur. Une idée ou vais-je devoir me rabattre sur la solution 1 ?