|
||||||
ROBOTICA
video
immagini
papers
progettati
costruiti
toolbox
vrml
simulatori
Struttura di un file Vrml 2.0 : concetti di node e field |
E' giunta l'ora di vedere
il nostro primo file vrml.
Vediamo di analizzare
le singole parti del listato.
La prima riga di ogni
file vrml 2.0 deve iniziare con la scritta : #VRML V2.0 utf8 In pratica questa
riga serve al browser per vedere se si tratta effettivamente di un file vrml
2.0. utf8 indica un particolare tipo di encoding che consente anche l'uso
di caratteri non ASCII, laddove si scriva il files per esempio in cirillico.
A parte la prima riga,
qualsiasi altra riga preceduta da # indica la presenza di un commento. La
presenza di commenti migliora senz'altro la leggibilità e la comprensione
del listato ; lo svantaggio è che si aumenta la dimensione del file che dovrà
essere downloadato.
Successivamente si definisce
il nodo Shape. Il termine nodo sarà molto spesso incontrato nel corso del
tutorial. Tutte le entità in un mondo vrml saranno rappresentate con dei nodi
(da semplici modelli geometrici a complessi script java). Si può capire immediatamente
quando si ha a che fare con un nodo in quanto la sua prima lettera è sempre
in maiuscolo. Il nodo Shape serve per rappresentare un oggetto di una certa
forma (nel nostro caso una sfera).
Il nodo Shape contiene
al suo interno due fields (campi) che sono il field appearance e il field
geometry. Si noti come i nomi dei campi partono invece con lettere minuscole.
Il field appearance definisce le caratteristiche fisiche dell'oggetto, mentre
il field geometry ne definisce la forma. La combinazione di questi due completa
il nodo Shape. All'interno del field appearance troviamo il nodo Appearance.
Il nodo Appearance contiene al suo interno il field material. Il field material
si preoccupa di gestire le caratteristiche fisiche dell'oggetto, come per
esempio il suo colore e come interagire con la luce. Il field material contiene
un ulteriore nodo Material il cui field emissiveColor contiene il colore dell'oggetto.
Il colore qui è indicato come una tripletta di valori compresi tra 0 e 1 e
indicanti i valori RGB del colore. In questo caso dunque la sfera sarà colorata
di rosso. Non ci si spaventi di fronte all'innestamento di nodi e campi. La
complicazione stà solo nello spiegarlo ; già al secondo o terzo mondo che
si scrive non gli si fa più caso.
Ci rimane ancora un campo
da spiegare. Finora abbiamo indicato alcune delle caratteristiche fisiche
dell'oggetto. Quello che manca è la forma dell'oggetto stesso. Questo viene
indicato dal field geometry. Questo campo contiene il nodo Sphere che indica
appunto un oggetto di tipo sferico. Il nodo sphere contiene in tal caso un
field di nome radius a cui associamo il valore 1 (in metri per esempio).
Si noti come tutti i
fields di un certo nodo sono racchiusi tra parentesi graffe. E' buona norma
indentare il sorgente, così come si fa in qualsiasi linguaggio di programmazione
strutturato. Attenzione però a non usare troppi spazi. Cercate di usare o
il tasto di tabulazione (ma ben presto vi ritrovereste sul margine destro
del foglio per mondi più complessi di questo) oppure uno o due spazi. Usarne
di più significherebbe aumentare inutilmente la dimensione del file, cosa
che ovviamente vogliamo evitare dato che siamo sul web (sembra che si sia
stimato che agendo in modo da risparmiare su quanto si digita si arrivi a
risparmiare anche sino al 30% dello spazio).
Abbiamo cominciato molto
piano e semplicemente. Ma già da questo esempio si dovrebbe notare qualcosa
di molto interessante cui avevo già accennato in precedenza. Per definire
una sfera mi servono pochissime righe. Se prendo viceversa una sfera da un
altro pacchetto di rendering e la salvo in formato vrml, il pacchetto la salva
come collezione di poligoni... il risultato mi sembra facilmente immaginabile.
Nelle prossime sezioni
vedremo di complicare un po' questo mondo aggiungendo altri oggetti sfruttando
le primitive che vrml pone direttamente a disposizione (oltre alla sfera si
rendono disponibli anche il cono, il cilindro e il parallelepipedo o box).
Si possono creare dei mondi molto interessanti usando anche solo queste primitive.
Se si vogliono poi raggiungere esiti più elevati si potrà ricorrere a definire
anche i singoli poligoni.
#VRML V2.0 utf8
# primo mondo vrml
Shape {
appearance Appearance {
material Material {
emissiveColor 1 0 0
}
geometry Sphere {
radius 1
}
}
Il risultato di questo listato dovrebbe essere una sfera di colore rosso. Sottolineo il dovrebbe in quanto allo stato attuale dei browsers
(come segnalato in precedenza) spesso non si ottengono i risultati attesi per quanto riguarda i colori. Già questo banale esempio,
testato su diversi browsers fornisce risultati diversi.