Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Seconda animazione: orologio Vrml

Una animazione più complessa: orologio VRML
Una animazione più complessa: orologio VRML
Link copiato negli appunti

Consideriamo ora un altro esempio, leggermente più complesso del precedente.
Supponiamo di volere realizzare un orologio dotato di lancette che segnano il
trascorrere del tempo.

Ognuna delle lancette sarà connessa ad una sfera, la quale, ruotando attorno
al suo centro, provocherà la rotazione della lancetta collegata.

Ovviamente le rotazioni da dare alle tre sfere saranno diverse, a seconda che
siano collegate alla lancetta dei secondi, dei minuti o delle ore.

Avremo, inoltre la necessità di definire tre sensori di tempo, ognuno con cicli
diversi ; il sensore per i secondi avrà un ciclo di 60 secondi; quello per i
minuti avrà un ciclo di 60 minuti e quello per le ore di 12 ore.

#VRML V2.0 utf8
# orologio
Viewpoint {
position 0 1.5 2 }
# il quadrante
DEF orologio transform {
translation 0 1.5 -1
children [
transform {
rotation 1 0 0 1.57
children [
Shape {
appearance Appearance {
material Material {diffuseColor .55 .55 .60}
}
geometry Cylinder {
radius 1
height .1 }
}
]
}
# tacca sul quadrante raffigurante
le ore 9
transform {
translation -.75 0 .11
children [
DEF tacca Shape {
appearance Appearance {
material Material { diffuseColor .25 .25 .25 }
}
geometry Box { size .2 .03 .002 }
}
]
}
# tacca sul quadrante raffigurante le ore 3
transform {
translation .75 0 .11
children [
# clonazione del nodo tacca
USE tacca
]
}
# tacca sul quadrante raffigurante le ore 12
transform {
translation 0 .75 .11
rotation 0 0 1 1.57
children [
USE tacca
]
}
# tacca sul quadrante raffigurante
le ore 6
transform {
translation 0 -.75 .11
rotation 0 0 1 1.57
children [
USE tacca
]
}
# sfera che funge da perno per la lancetta
delle ore
DEF perno_ore transform {
children [
Shape {
appearance Appearance {
material Material { diffuseColor 1 0 0 }
}
geometry Sphere { radius .005 }
}
# lancetta delle ore
transform {
translation 0 .2 .05
children [
Shape {
appearance Appearance {
material Material { diffuseColor 1 .75 0 }
}
geometry Box { size .05 .5 .002 }
}
]
}
]
}
# sfera che funge da perno per la lancetta
dei minuti
DEF perno_minuti transform {
children [
Shape {
appearance Appearance {
material Material { diffuseColor 1 0 0 }
}
geometry Sphere { radius .005 }
}
# lancetta dei minuti
transform {
translation 0 .25 .10
children [
Shape {
appearance Appearance {
material Material { diffuseColor .66 .33 0 }
}
geometry Box { size .03 .66 .002 }
}
]
}
]
}
# sfera che funge da perno per la lancetta
dei secondi
DEF perno_secondi transform {
children [
Shape {
appearance Appearance {
material Material { diffuseColor 1 0 0 }
}
geometry Sphere { radius .005 }
}
# lancetta dei secondi
transform {
translation 0 .25 .15
children [
Shape {
appearance Appearance {
material Material { diffuseColor .75 .25 0 }
}
geometry Box { size .01 .75 .001 }
}
]
}
]
}
]
}
# i tre sensori di tempo
DEF secondi TimeSensor {
cycleInterval 60
enabled trUE
loop trUE }
DEF minuti TimeSensor {
cycleInterval 3600
enabled trUE
loop trUE }
DEF ore TimeSensor {
cycleInterval 86400
enabled trUE
loop trUE}
# i 3 interpolatori
DEF rotsec OrientationInterpolator
{
key [0 .25 .5 .75 1]
keyValue [0 0 1 0, 0 0 1 -1.57, 0 0 1 -3.14, 0 0 1 -4.71,
0 0 1 -6.28]
}
DEF rotmin OrientationInterpolator
{
key [0 .25 .5 .75 1]
keyValue [0 0 1 0, 0 0 1 -1.57, 0 0 1 -3.14, 0 0 1 -4.71,
0 0 1 -6.28]
}
DEF rotore OrientationInterpolator
{
key [0 .25 .5 .75 1]
keyValue [0 0 1 0, 0 0 1 -1.57, 0 0 1 -3.14, 0 0 1 -4.71,
0 0 1 -6.28]
}
# indirizzamento gli eventi in uscita

ROUTE secondi.fraction_changed TO rotsec.set_fraction
ROUTE rotsec.value_changed TO perno_secondi.set_rotation
ROUTE minuti.fraction_changed TO rotmin.set_fraction
ROUTE rotmin.value_changed TO perno_minuti.set_rotation
ROUTE ore.fraction_changed TO rotore.set_fraction
ROUTE rotore.value_changed TO perno_ore.set_rotation

Si noti il funzionamento dei nodi ROUTE. Il sensore di tempo dei secondi
invia in uscita il valore

fraction_changed, il uqale va a settare la frazione nell'interpolatore.
L'interpolatore calcola di conseguenza il nuovo valore di rotazione e lo usa
per settare il campo rotation del perno della lancetta dei secondi. Lo stesso vale per le altre coppie di ROUTE.

Ti consigliamo anche