Rien n'est jamais perdu tant qu'il reste quelque chose à trouver
Etape 11
La première façon de modifier les body languages, c'est d'éditer le fichier "avgest.wrl" que vous devez déjà avoir téléchargé.
Pour rendre les choses plus claires, chaque animation est encadré par les commentaires #begin gesture ... #end gesture
Pour chaque animation sont définies un PositionInterpolator PI et un OrientationInterpolator OI.
Le champ key de l'interpolateur donne les moments clés de l'animation, compris entre 0.0 et 1.0. "0.5" correspond à la moitié de l'animation...
Le champ keyValue donne les valeurs clés associées aux moments clés : des vecteurs représentant la position ou la rotation de l'avatar à cet instant suivant le type d'interpolateur.
Exemple :
DEF PI PositionInterpolator {
key [ 0, 0.5, 1.0 ]
keyValue [ 0 0 0, 0 1 0, 0 0 0 ]
value_changed IS position_changed
}
fera monter puis redescendre l'avatar.
Consultez les cours sur la page de liens pour plus d'infos sur la syntaxe.
Les animations définies par M. Blaxxun se composent d'une translation et d'une rotation que vous pouvez changer comme ça vous amuse.
Vous pouvez également changer la durée d'une animation en modifiant la valeur de cycleInterval dans le node TimeSensor de chaque gesture.
Etape 12
La méthode 11 permettait uniquement de faire bouger l'avatar entier.
Une autre méthode beaucoup plus puissante vous permet d'animer indépendemment certaines parties de l'avatar.
Pour cela, on peut reprendre l'avatar enveloppé dans ses gestures construit tout au long de ces 10 longues étapes. Il faut ensuite déplacer la gesture choisie dans le corps de l'avatar, et utiliser un chrono comme celui-ci :
DEF chrono_gesture1 TimeSensor {
enabled TRUE
cycleInterval 1 #durée de l'animation
loop FALSE #boucle désactivée
startTime IS gesture1 #le déclenchement de la gesture lance le chrono
stopTime 0
}
Vous pouvez définir autant d'animations (interpolateurs) que vous voulez. Chacune d'elles doit être reliée au chrono, par exemple, avec un objet "tete", un positionInterpolator "pi_tete" et un chrono "chrono_gesture1" :
ROUTE chrono_gesture1.fraction_changed TO pi_tete.set_fraction
ROUTE pi_tete.value_changed TO tete.set_translation
Enfin, ne pas oublier de supprimer les références faites à la gesture déplacée à la fin du fichier, c'est-à-dire par exemple :
DEF G1 DefaultGesture1 { startTime IS gesture1 }
ROUTE G1.position_changed TO T.set_translation
Regardez le fichier source de totem.wrl pour une démonstration (cf gesture 3).