![]() |
|
![]() |
||||
![]() |
ROBOTICA
video
immagini
papers
progettati
costruiti
toolbox
vrml
simulatori
![]() |
Field types e Eventi | ![]() |
Riconsideriamo la specifica
del nodo TimeSensor che abbiamo visto nel precedente paragrafo.
Come già accennato qualche
volta in passato la seconda colonna definisce il tipo del campo. Vediamo ora
brevemente quali sono i tipi ammessi in vrml.
Data la definizione di
un nodo, siamo ora in grado di capire il tipo dei singoli campi componenti.
Non c’è molto altro da
dire sui tipi assumibili dai campi. Per eventuali approfondimenti ci si rivolga
direttamente alle specifiche. Per quanto dobbiamo fare, questo basta e avanza.
Occupiamoci ora della
prima colonna, senz’altro la più interessante per i nostri scopi.
Come si può vedere rileggendo
la definizione del nodo TimeSensor (o di altri pochi nodi forniti in precedenza)
nella prima colonna possiamo trovare le seguenti quattro caratterizzazioni
:
Questo ulteriore tipo,
detto tipo di interfaccia, fornito ai campi è strettamente correlato alla
nozione di evento. In vrml 2.0 alcuni oggetti sono in grado di emettere eventi,
altri di riceverli. Possiamo pensare ad un evento come ad un segnale che un
nodo manda verso l’esterno e che può essere catturato da un altro nodo. Sfruttando
questa nozione possiamo spiegare meglio come funziona il nodo TimeSensor.
La sua unica funzione è quella di emettere eventi che sono correlati con il
trascorrere del tempo. Altri nodi potranno ricevere questi eventi e in base
ad essi cambiare il loro stato. Se riflettiamo un po’ su questo ci accorgiamo
di quale sia il meccanismo sfruttato per realizzare animazioni. In pratica
si fa cambiare lo stato di un nodo (che per esempio rappresenta un certo oggetto)
in relazione con il tempo. E questo altro non è che una animazione.
Per capire ancora più
a fondo il funzionamento del nodo TimeSensor (ma in sostanza di tutti i nodi)
dobbiamo però capire il significato dei quattro tipi di interfaccia esposti
in precedenza.
Il tipo di interfaccia
specifica quale accesso abbiano gli altri nodi sul campo del nodo. Per un
campo di tipo field i nodi esterni non hanno alcun accesso. Nel caso eventIn
è concesso l’accesso in scrittura ; pertanto nodi esterni possono settare
il valore di questo campo. Per campi di tipo eventOut si ha accesso il lettura.
In pratica il campo esporta il proprio valore verso altri nodi che possono
leggerlo. Infine, un tipo exposedField indica che un nodo esterno può accedere
sia in lettura che in scrittura.
A questo punto abbiamo
davvero tutti gli elementi per capire le animazioni in vrml. Una volta attivato
un nodo TimeSensor, il valore assunto dal campo time, che è un eventOut, viene
letto dal nodo da animare. Se per esempio vogliamo semplicemente traslare
un oggetto possiamo fare in modo che il campo translation del nodo Transform
che lo contiene varii in conseguenza del trascorrere del tempo.
L’animazione in vrml
sta tutta qui; a livello di concetto per lo meno... in quanto ci manca ancora
qualcosa per vedere girare la nostra prima animazione. Ci sono infatti ancora
due aspetti che abbiamo lasciato in sospeso. In primo luogo non è chiaro come
legare un campo che esporta un valore ad un campo che invece lo legge (e che
quindi modifica il suo valore in funzione dell’altro). In secondo luogo va
specificato come variare il campo (come per esempio la posizione) in funzione
del valore letto dall’altro campo (solitamente il campo time di un nodo di
tipo TimeSensor). Questi due argomenti saranno alla radice delle prossime
due sezioni. Dopo averli introdotti potremo cimentarci nella nostra prima
animazione.