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

L'animazione in VRML: concetti fondamentali

I concetti fondamentali per la realizzazione e la gestione di mondi VRML animati
I concetti fondamentali per la realizzazione e la gestione di mondi VRML animati
Link copiato negli appunti

Come già accennato nel capitolo relativo alla storia del VRML e del 3D per
il Web, con la versione VRML 2.0 si è introdotta la possibilità di associare
animazioni e una serie di comportamenti agli oggetti, sia con delle tecniche
proprie del VRML sia mediante interfacciamento con il linguaggio di programmazione
Java.

In questo capitolo si affronteranno i concetti fondamentali per la realizzazione
e la gestione di mondi animati.

Per realizzare un'animazione in VRML è necessario acquisire la padronanza dei
seguenti aspetti:

  • Occorre introdurre il concetto di tempo nel mondo in questione;
  • È necessario che determinati valori relativi alle caratteristiche degli oggetti
    da animare siano disponibili ad essere modificati in relazione allo scorrrere
    del tempo;
  • VRML fornisce una serie di cosiddetti interpolatori, oggetti che facilitano
    il nostro compito preoccupandosi di calcolare (interpolare appunto) valori diversi
    a seconda del trascorrere del tempo;
  • È necessario che ci sia un mezzo di comunicazione in grado di trasportare il
    messaggio relativo ai cambiamenti che dovranno realizzarsi.

Il nodo TimeSensor

Vrml 2.0, allo scopo di tenere conto del passare del tempo, fornisce il nodo
TimeSensor.

In pratica un orologio che segna il trascorrere del tempo. Questo nodo, come
è facile intuire, è fondamentale per qualsiasi animazione in ambiente VRML.
Il nodo TimeSensor contiene diversi campi, di seguito ecco quelli maggiormente
utilizzati:

loop
enabled
startTime

Il campo cycleInterval indica il numero di secondi relativo ad un ciclo
di tempo. Indica cioè per quanto tempo (in secondi) l'orologio sarà attivo.
Come si vedrà, si possono avere più cicli di tempo all'interno di uno stesso
mondo.

Il secondo campo indica la ripetizione o meno del ciclo una volta che l'orologio
ha concluso il primo di essi. Impostando il campo loop a trUE si ha un
orologio che scandisce il tempo da 0 a X secondi e ricomincia il ciclo da 0
quando ha raggiunto il valore X. Viceversa, con il valore settato a FALSE, al
termine del primo ciclo l'orologio cessa, per così dire, di funzionare.

Il terzo campo, enabled indica se l'orologio in questione è attivato
automaticamente oppure no. L'ultimo campo, startTime indica in quale
momento dovrà iniziare la scansione del tempo.

Fields ed eventi

In VRML 2.0 alcuni oggetti sono in grado di emettere eventi, altri di riceverli.
Possiamo pensare agli eventi come ad avvenimenti che si verificano all'interno
del mondo (per essere precisi, all'interno del browser). Un tipico esempio di
evento è l'atto di "cliccare" con il mouse sopra un link. Nel nostro caso si
consideri un evento come un segnale trasmesso da un nodo e che può essere ricevuto
da un altro nodo.

Il VRML 2.0 fornisce quattro tipi di interfaccia, grazie ai quali è possibile
specificare quale accesso abbiano gli altri nodi sul campo di uno specifico
nodo:

field
exposedField
eventIn
eventOut

Per un campo con interfaccia di tipo field i nodi esterni non hanno
alcun accesso. Un tipo exposedField indica, invece, un campo i cui valori
sono per così dire "esposti", disponibili: un nodo esterno può cioè accedere
ad essi sia in lettura che in scrittura.

L'interfaccia eventIn concede l'accesso in scrittura; ciò significa
che nodi esterni possono impostare il valore di questo campo. Per i campi di
tipo eventOut infine, si ha accesso solo in lettura: in pratica i valori
del campo possono essere inviati verso altri nodi.

Si immagini una generica animazione: una sfera che si muove lungo l'asse x
in un determinato lasso di tempo. Il nodo TimeSensor, come visto, contiene
il campo cycleInterval. Questo campo è di tipo eventOut: quindi
i valori dello scorrere del tempo presenti in questo campo possono essere letti
da un altro nodo. Per quanto riguarda la sfera occorrerà trovare un campo di
tipo eventIn all'interno del quale un nodo possa scrivere via via i valori
delle diverse posizioni della sfera lungo il tragitto del suo spostamento.

Per quanto riguarda maggiori dettagli relativi ai tipi di interfaccia attribuiti
ai singoli nodi del VRML, rimandiamo al capitolo relativo alle specifiche tecniche,
o direttamente alla pagina http://www.web3d.org.

Gli interpolatori

Come già anticipato, un interpolatore si preoccupa di calcolare valori diversi
di un campo (come per esempio la posizione) in funzione dei valori di un altro
campo (solitamente il campo time di un nodo di tipo TimeSensor).Un nodo interpolatore quindi, riceve in ingresso
un parametro dipendente dal tempo e manda in uscita un valore dipendente a sua
volta dal tempo.

VRML fornisce il seguente set di interpolatori predefiniti: ColorInterpolator,
CoordinateInterpolator, NormalInterpolator, OrientationInterpolator, PositionInterpolator
e ScalarInterpolator
. Come vedremo più indettaglo in seguito, ognuno di
questi interpolatori esporta tipi diversi, ma tutti condividono il seguente
set di campi:

key
keyValue
set_fraction
value_changed

Il campo key dichiara i punti chiave di un cambiamento. Ovvio che essi
debbano essere almeno due: il punto di partenza e il punto di arrivo.

Il campo keyValue da parte sua, descrive i valori relativi ai punti
chiave sopra enunciati. Il tipo di valore dipende ovviamente dal tipo
di interpolatore (ad esempio il ColorInterpolator contiene valori chiave che
descrivono cambiamenti di colore, mentre PositionInterpolator contiene valori
riferiti alle posizioni chiave di un oggetto in movimento, come si può vedere
nel seguente esempio:

PositionInterpolator {
key [ 0 .33 .66 1 ]
keyValue [ 1 0 0, 2 0 0, 3 0 0, 5 0 0 ]
}

Gli altri due campi, set_fraction e value_changed sono strettamente
connessi: il primo riceve il valore di un evento ed effettua il calcolo di interpolazione,
il risultato di tale operazione è rappresentato appunto dal campo value_changed,
il quale potrà essere trasmesso come nuovo valore al nodo interessato dal cambiamento.

Il comando ROUTE

Come si è visto, esiste un nodo TimeSensor che scandisce il tempo. Inoltre
abbiamo a disposizione un nodo che presenta valori diversi a seconda dello scorrere
del tempo, in modo tale che questi valori possano poi essere inviati al nodo
da animare. Occorre ora un elemento che per l'appunto sia in grado di passare
il contenuto di un nodo ad un altro nodo. Questo è costituito dal comando ROUTE.
Esso si incarica di mettere in comunicazione tra loro due campi: un campo che
esporta un valore ed un campo che invece lo legge e che quindi modifica il suo
valore in funzione del primo.

La sintassi è del tipo:

ROUTE campo di partenza TO campo di
destinazione.

Nel caso di una semplice animazione, in genere il comando ROUTE si incarica
di leggere i valori relativi allo scorrere del tempo per poi comunicarli ad
un determinato campo di un interpolatore. Questi, come già detto si occuperà
di effettuare il calcolo di interpolazione. Il risultato verrà a sua volta letto
da un secondo comando ROUTE e da questo trasmesso al nodo che deve subire
la modifica.

Nel prossimo capitolo si vedrà con maggiore dettaglio quest'ultimo aspetto
e si metterà finalmente in pratica quanto qui descritto.

Ti consigliamo anche