Sommaire Page precedente Page suivante page 17


Creer des animations

Des machines qui fonctionnent, des portes qui s'ouvrent, des robots baladeurs ou le changement des saisons... Ce chapitre vous permettra de creer des animations de toutes sortes, automatiques ou commandees par les sensors.

TimeSensor

Il defini la duree de l'animation, si elle se produit en boucle, son debut et sa fin.
    
    TimeSensor {
        cycleInterval 3.0  #duree de l'animation en secondes
        enabled TRUE       #active ou non
        loop TRUE          #animation en boucle
        startTime 0        #temps pour demarrer
        stopTime 1         #temps pour arreter

Les interpolators

Ils calculent les positions intermediaires dans les animations.Il en existe 6 differents, ils sont utilises en fonction du type de variable avec lequel ils fonctionnent: Vous trouverez des precisions sur les interpolators dans l'annexe 1.

Exemple : Le petit train
train.wrl
Pour faire tourner ce train, il faut trois choses:

   DEF train Transform {
       rotation 0 1 0 0
       children [
           Transform {
               translation 3.3 0.4 0
               children [
                   Shape {
                       ....
On nomme le noeud contenant le train et on decale celui-ci de 3.3 afin qu'il tourne en rond et pas sur lui meme.
    DEF temps TimeSensor {
        cycleInterval 10
        loop TRUE
    }
Le TimeSensor s'appelle temps, un tour dure 10 secondes, le train tourne indefiniment.
    DEF chemin OrientationInterpolator {
        key      [   0.0  ,   0.33   ,   0.66   ,   1.0   ]
        keyValue [ 0 1 0 0,0 1 0 2.09,0 1 0 4.19, 0 1 0 0 ]
    }
key decoupe le temps d'animation.Il commence a 0 pour finir a 1.
keyValue attribue une valeur de rotation pour chaque temps.Le premier et le dernier sont les memes pour faire un tour complet.
Dans l'exemple, le tour est decoupe en trois parties egales de 120 degres (2.09 radians) et 1/3 du temps total (0.33).
note : Le decoupage en trois est necessaire car l'interpolator choisi toujours le chemin le plus court.
    ROUTE temps.fraction_changed  TO chemin.set_fraction
On route une fraction de temps produite par le TimeSensor vers l'interpolator qui va calculer l'orientation du train a ce moment precis.
    ROUTE chemin.value_changed  TO  train.set_rotation
On route la valeur calculee par l'interpolator vers le noeud Transform qui contient le train.

Exemple : la porte
porte.wrl
Dans cet exemple, on utilise bien sur un TimeSensor, un PositionInterpolator pour faire glisser la porte, mais aussi un ProximitySensor pour demarrer le cycle.

    DEF tapis ProximitySensor {
        center 0 1.5 0
        size 4 3 8
    }
On defini un ProximitySensor appele tapis.
    ROUTE tapis.enterTime  TO  temps.set_startTime
On route le enterTime du ProximitySensor vers le startTime de TimeSensor, ce qui demarre le cycle.La boucle est sur false, la porte ne s'ouvre qu'une seule fois.
Le reste est identique au petit train.