ROBOTICA

video
immagini
papers
progettati
costruiti
toolbox
vrml
simulatori

links

 

Papers
meccanica
sistemi
documents

Capitolo 6° Struttura di un file Vrml 2.0 : concetti di node e field Capitolo 8°

E' giunta l'ora di vedere il nostro primo file vrml.


#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.

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.