See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: [C++]problème animation avec parents[résolu]  (Read 2093 times)

0 Members and 1 Guest are viewing this topic.

Offline no matter

  • Legend
  • ******
  • Posts: 2826
  • Karma: 1
25 May 2008, 20:14:32
J'ai un sérieux problème avec les animations de mon petit rover.

J'ai une animation qui est fait tourner les roues lorsqu'on "tourne le volant" (elle est attribué à un rudder crée par
CreateControlSurface) et 2 autres qui font la rotation à 360° lorsque la roue roule (une lorsqu'on avance et l'autre
pour reculer, lancées au PostStep). La première anim doit donc être parente des deux autres pour que çà fonctionne.

Ma première tentative ne me donne aucun résultat correct, aucun parent n'est pris en compte et je ne sais pas
pourquoi:
Quote
effacé pour plus de lisibilité. Cette partie ne marchait pas.

A force de test, je me suis rendu compte qu'en attibuant des parents provenants de deux animations distinctes (donc
2 rudders ont été créés) pour chacunes deux animations à 360°, me premettait de régler la situation pour
anim_roue lorsqu'on avance mais lorsqu'on recule, inv_anim_roues ne prend toujours pas en compte les
parents:
Quote
void LTVROVER ::DefineAnimations (void)
{
   // -------Front Left Wheel Turn
   static UINT TurnG1[1]={45};
   static MGROUP_ROTATE tug1(0,TurnG1, 1, _V(-0.261,-0.166,0.357), _V(0,1,0), 20*RAD);
   static UINT TurnG11[1]={49};
   static MGROUP_ROTATE tug11(0,TurnG11, 1, _V(-0.261,-0.166,0.357), _V(0,1,0), 20*RAD);
   // -------Rear Left Wheel Turn
   static UINT TurnG3[1]={46};
   static MGROUP_ROTATE tug3(0,TurnG3, 1, _V(-0.261,-0.166,-0.356), _V(0,1,0), -20*RAD);   
   static UINT TurnG33[1]={50};
   static MGROUP_ROTATE tug33(0,TurnG33, 1, _V(-0.261,-0.166,-0.356), _V(0,1,0), -20*RAD);
   // -------Front Right Wheel Turn
   static UINT TurnD1[1]={44};
   static MGROUP_ROTATE tud1(0,TurnD1, 1, _V(0.261,-0.166,0.357), _V(0,1,0), 20*RAD);
   static UINT TurnD11[1]={48};    
   static MGROUP_ROTATE tud11(0,TurnD11, 1, _V(0.261,-0.166,0.357), _V(0,1,0), 20*RAD);
   // -------Rear Right Wheel Turn
   static UINT TurnD3[1]={47};    
   static MGROUP_ROTATE tud3(0,TurnD3, 1, _V(0.261,-0.166,-0.356), _V(0,1,0), -20*RAD);
   static UINT TurnD33[1]={51};
   static MGROUP_ROTATE tud33(0,TurnD33, 1, _V(0.261,-0.166,-0.356), _V(0,1,0), -20*RAD);

   // -------Left Wheels rotation (forward and backward)   
   static UINT roueG1[2] = {35,36};
   roueG1_rot      = new MGROUP_ROTATE (0, roueG1, 2, _V(-0.261,-0.166,0.357), _V(1,0,0),  360*RAD);
   roueG1_invrot   = new MGROUP_ROTATE (0, roueG1, 2, _V(-0.261,-0.166,0.357), _V(-1,0,0), 360*RAD);
   static UINT roueG2[2] = {33,34};
   roueG2_rot      = new MGROUP_ROTATE (0, roueG2, 2, _V(-0.261,-0.166,0.000), _V(1,0,0),  360*RAD);
   roueG2_invrot   = new MGROUP_ROTATE (0, roueG2, 2, _V(-0.261,-0.166,0.000), _V(-1,0,0), 360*RAD);
   static UINT roueG3[2] = {32,37};
   roueG3_rot      = new MGROUP_ROTATE (0, roueG3, 2, _V(-0.261,-0.166,-0.356), _V(1,0,0),  360*RAD);
   roueG3_invrot   = new MGROUP_ROTATE (0, roueG3, 2, _V(-0.261,-0.166,-0.356), _V(-1,0,0), 360*RAD);
   
   // -------Right wheels rotation (forward and backward)   
   static UINT roueD1[2] = {26,27};
   roueD1_rot      = new MGROUP_ROTATE (0, roueD1, 2, _V(0.261,-0.166,0.357), _V(1,0,0),  360*RAD);
   roueD1_invrot   = new MGROUP_ROTATE (0, roueD1, 2, _V(0.261,-0.166,0.357), _V(-1,0,0), 360*RAD);
   static UINT roueD2[2] = {28,29};
   roueD2_rot      = new MGROUP_ROTATE (0, roueD2, 2, _V(0.261,-0.166,0.000), _V(1,0,0),  360*RAD);
   roueD2_invrot   = new MGROUP_ROTATE (0, roueD2, 2, _V(0.261,-0.166,0.000), _V(-1,0,0), 360*RAD);
   static UINT roueD3[2] = {30,31};
   roueD3_rot      = new MGROUP_ROTATE (0, roueD3, 2, _V(0.261,-0.166,-0.356), _V(1,0,0),  360*RAD);
   roueD3_invrot   = new MGROUP_ROTATE (0, roueD3, 2, _V(0.261,-0.166,-0.356), _V(-1,0,0), 360*RAD);

   anim_rudder = CreateAnimation (0.5);   // rudder1 : AIRCTRL_RUDDER/AIRCTRL_AXIS_YPOS
   anim_rudder2 = CreateAnimation (0.5);          //rudder2 : fix?
   anim_roues = CreateAnimation (0);      // forward
   inv_anim_roues = CreateAnimation (0);   // backward

   // l&r turn anim (Control surface) forward /rudder1
   parent1 = AddAnimationComponent  (anim_rudder, 0, 1, &tug1);
   parent2 = AddAnimationComponent  (anim_rudder, 0, 1, &tug3);
   parent3 = AddAnimationComponent  (anim_rudder, 0, 1, &tud1);
   parent4 = AddAnimationComponent  (anim_rudder, 0, 1, &tud3);
   parent5 = AddAnimationComponent  (anim_rudder2, 0, 1, &tug11);
   parent6 = AddAnimationComponent  (anim_rudder2, 0, 1, &tug33);
   parent7 = AddAnimationComponent  (anim_rudder2, 0, 1, &tud11);
   parent8 = AddAnimationComponent  (anim_rudder2, 0, 1, &tud33);
   
   // Forward wheels rotation (->PostStep)
   AddAnimationComponent (anim_roues, 0, 1, roueG1_rot, parent1);    
   AddAnimationComponent (anim_roues, 0, 1, roueG3_rot, parent2);
   AddAnimationComponent (anim_roues, 0, 1, roueD1_rot, parent3);   
   AddAnimationComponent (anim_roues, 0, 1, roueD3_rot, parent4);
   AddAnimationComponent (anim_roues, 0, 1, roueG2_rot);
   AddAnimationComponent (anim_roues, 0, 1, roueD2_rot);

   // Backward wheels rotation (->PostStep)
   AddAnimationComponent (inv_anim_roues, 0, 1, roueG1_invrot, parent5);   
   AddAnimationComponent (inv_anim_roues, 0, 1, roueG3_invrot, parent6);
   AddAnimationComponent (inv_anim_roues, 0, 1, roueD1_invrot, parent7);   
   AddAnimationComponent (inv_anim_roues, 0, 1, roueD3_invrot, parent8);   
   AddAnimationComponent (inv_anim_roues, 0, 1, roueD2_invrot);
   AddAnimationComponent (inv_anim_roues, 0, 1, roueG2_invrot);


Je n'arrive pas à trouver la raison des problèmes avec les parents non pris en compte, d'ordinaire mes parents sont
dans la même animation et attribués à cette même animation. Je n'ai jamais eu de problèmes ainsi.
Mais pour le rover, on est plutôt dans une situation où une animation doit être parente de deux autres avec les
mêmes parents pour ces deux anims. J'ai un peu fouillé le SDK mais pas trouvé de restriction ou d'obligation
concernant ce cas de figure.

J'ai du faire une erreur quelque part mais j'ai vraiment du mal à voir où. Personne ne voit d'erreur?


et anim_rudder et anim_rudder2 sont tributaires de 2 rudders et sont donc lancée chaque fois que je tourne à
gauche ou à droite (l'état à la création est 0.5, roue centrée).

Si quelqu'un voit une raison ou un truc oublié merci d'avance :wor:



Message modifié ( 30-05-2008 23:05 )

------------

no matter.

Offline no matter

  • Legend
  • ******
  • Posts: 2826
  • Karma: 1
Reply #1 - 30 May 2008, 23:16:54
Çà y est, j'ai trouvé le problème.
j'avais simplement déclaré deux CreateControlSurface comme çà sans me poser de question, de plus les rudders
crées ainsi animaient des groupes invisibles (moyeux des roues) et je ne m'apercevais pas que le deuxième rudder ne
fonctionnait pas puisque chacun des enfants provoquait quoiqu'il arrive le même résulat sur les roues (tourne à
gauche ou à droite) :siffle:

Bref:
Avant de créer un deuxième rudder, le premier tu détruiras :prof:

Ça m'a pris quelques heures de réflexion et un debuggage qui m'a rendu complètement dingue (en debug dès
l'implication du deuxième rudder, VC++ plaçait un breakpoint tout seul et tous les paramètres d'animations devenaient
impossibles à interpréter :bug: )


------------

no matter.

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #2 - 31 May 2008, 00:03:47

Tu pourrais quand même remercier tous ceux qui se sont décarcassés pour t'aider ! :rant:


Pic

Offline no matter

  • Legend
  • ******
  • Posts: 2826
  • Karma: 1
Reply #3 - 31 May 2008, 17:26:52
:ptdr:
L'erreur n'étais pas présente dans la partie du code que j'avais posté!
Forcément on pouvait lire et relire ^^



Message modifié ( 31-05-2008 18:57 )

------------

no matter.

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #4 - 01 June 2008, 14:49:39
Désolé de pas avoir réagis mais ca avait l'air la galère ton truc , encore plus galère sans avoir les outils de débug à
dispositions.

A++

Dan

« Last Edit: 01 June 2008, 14:49:39 by DanSteph »