XML  »  Guide  »  Guida VRML 

L'animazione in VRML: concetti fondamentali



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.

Ultimi articoli XML

Open Graph Protocol, Facebook e il Web Semantico

Come sfruttare il Web Semantico "made in Facebook"

Introduzione a RDFa - 2

Arricchire un documento HTML con metadati semantici presi dal...

Introduzione a RDFa

Cos'è e a cosa serve il linguaggio che potrebbe aprire il campo alle...

Usare SVG per creare sfondi flessibili, scalabili e divertenti

Scopriamo cos'è il formato SVG e come possiamo usarlo in modo...

Visualizzare i metadati RDF Dublin core con le trasformazioni XSL

Mettere insieme XSL, XPATH e le definizioni Dublin core per...

Altri articoli

Guide XML

Guida Podcasting

Un percorso in 16 lezioni, per entrare nella filosofia del podcast...

Guida Smil 2.0

Un percorso pratico alla scoperta di SMIL: il linguaggio (XML) per...

Guida Web service

Cosa sono, a cosa servono e come si creano servizi Web, i sistemi...

Altre guide

Newsletter @XML

Ogni mese, direttamente nella tua e-mail: articoli, guide, FAQ e approfondimenti sui linguaggi della famiglia XML.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Nessun corso previsto

Nessun corso previsto