Sommaire | Page precedente | Page suivante | page 17 |
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
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.