XML  »  Guide  »  Guida VRML 

Elementi base di navigazione



Viewpoint

Finora non si è mai presa in considerazione la posizione dell’utente. In effetti il visitatore di un mondo VRML può muoversi (tra l'altro con differenti modalità) in qualunque direzione, eccezion fatta per vincoli imposti dal nodo Collision.

È altrettanto vero che in mondi 3D anche limitatamente complessi, la navigazione deve comunque partire da un punto ben precisato. Ipotizzando la realizzazione di una città VRML, occorre stabilire una posizione di partenza per la visione e la navigazione della stessa in maniera ottimale. Nel caso in cui non venga specificato diversamente il browser si preoccupa di dare una vista iniziale di default (in genere l’origine del sistema di riferimento). È quindi compito del programmatore fornire all'utente un punto di partenza iniziale, una cosiddetta vista d'entrata. Si possono poi specificare anche punti di vista aggiuntivi oltre a quello iniziale, in maniera tale da offrire all’utente una collezione di posizioni che si ritengono più interessanti e funzionali agli scopi del mondo progettato. La selezione delle varie Viewpoints viene realizzata dall'utente tramite menù. Inoltre è possibile programmare una sequenza animata che percorre il mondo lungo un percorso tra più punti, consentendo la possibilità quindi di creare tour guidati.

Il seguente listato descrive due punti di vista piuttosto semplici:

#VRML V2.0 utf8
# esempio di utilizzo del nodo Viewpoint

Viewpoint{
position 0 -1.25 7.5
orientation 0 0 0 0
description "Distante dal cubo"
}

Viewpoint{
position 0 2.5 2.5
orientation -1 .5 0 .75
description "Vicino al cubo"
}

Shape {
appearance Appearance {
material Material { diffuseColor .88 .15 .01
specularColor .19 .03 .03
ambientIntensity .0833
shininess .08
}
}
geometry Box { size 1 1 1 }
}

punti di vista.wrl

Per realizzare i 2 punti di vista si sono inseriti 2 nodi Viewpoint. Solitamente i nodi Viewpoint sono posti all’inizio del file. Il primo nodo Viewpoint corrisponde di default al punto di vista iniziale. Per definire le rispettive visuali è stato sufficiente dichiarare gli attributi dei campi position e orientation: il primo di essi definisce la posizione dell’osservatore, il secondo l’orientamento del suo sguardo. Infine si è specificata una descrizione per ognuna delle viste, queste descrizioni costituiscono le voci del menù di selezione presente sul player.

NavigationInfo

Il nodo NavigationInfo ha il compito di informare il browser circa alcune caratteristiche dell'utente (o meglio, dell'avatar che lo rappresenta), ad esempio la sua altezza, la massima distanza a cui può vedere e così via. Con il termine avatar si intende la rappresentazione fisica dell’utente nel mondo che sta esplorando. La maggior parte di queste caratteristiche acuistano rilievo all'interno di mondi multi-utente, poichè contribuiscono alla rappresentazione del nostro alter ego così come la vedranno gli altri utenti presenti.

Il nodo NavigationInfo viene solitamente posto all’inizio del file VRML.

Si veda il semplice esempio:

#VRML V2.0 utf8
# esempio di utilizzo del nodo NavigationInfo

NavigationInfo {
avatarsize [ 3.8, 3, 0.5 ]
headlight trUE
speed 1
type "WALK"
visibilityLimit 10
}


Shape {
appearance Appearance {
material Material { emissiveColor .25 .5 1 }
}
geometry Box { size 3 3 3 }

}

Il campo avatarsize specifica le caratteristiche principali dell’avatar dell’utente. Questo campo contiene più valori. Il primo di questi specifica il raggio di collisione dell'utente cioé quanto può avvicinarsi ad oggetti solidi prima di urtare contro di essi. Il secondo campo specifica l’altezza a cui devono restare gli occhi dell’osservatore in relazione al terreno su cui cammina. Il valore del terzo parametro indica il massimo salto che può essere effettuato per scavalcare un ostacolo (i gradini di una scala ad esempio).

Il secondo field indica l’attivazione o meno dell’headlight. Ponendo headlight a trUE si attiva una luce direzionale che punta sempre nella direzione in cui l’osservatore sta guardando. Si consiglia di porre il parametro a FALSE in quanto il valore trUE praticamente annulla qualsiasi settaggio impostato dal programmatore nella creazione delle luci. Il campo speed indica la velocità, espressa in metri al secondo, con la quale l’utente può procedere nella scena.

Type indica invece la modalità di navigazione. Ogni browser dovrebbe rendere disponibile un certo numero di possibilità. Queste sono: ANY, WALK, EXAMINE, FLY, NONE. La differenza tra WALK e FLY è che quando si è in WALK la navigazione procede tenendo conto della gravità. Con EXAMINE si procede ad esaminare l’oggetto ruotandolo o avvicinandolo. NONE indica invece di disattivare i controlli del browser e lasciare attivi solo i controlli forniti dal programmatore del mondo; lasciando in pratica attivi soltanto i “tour programmati”, viceversa ANY indica la possibilità di usare tutti i metodi di navigazione.

Infine, il campo visibilityLimit specifica la massima distanza a cui si può vedere. Con il valore 0.0 si indica una visibilità infinita.

Nodo Collision

Il nodo Collision è stato introdotto per risolvere un problema che era presente in VRML 1.0. Infatti, a parte apposite soluzioni proprietarie dei browsers, l’utente poteva tranquillamente passare attraverso gli oggetti. Ora invece, è sufficiente aggiungere un nodo Collision che raggruppi gli oggetti che si vogliono rendere solidi. Vediamo la sintassi di questo nodo con un banale esempio :

#VRML V2.0 utf8
# esempio di collision detection

Collision {
children [

transform {
rotation 1 1 1 1.1
children [
Shape {
appearance Appearance {
material Material { emissiveColor .25 .25 1 }
}
geometry Box { size 3 3 3 }
}
]
}
]
}

collision.wrl

Questo esempio crea un mondo contenente un cubo. Se in fase di navigazione l’utente si imbatte nell’oggetto non può attraversarlo.

La sintassi del nodo Collision a questo punto della guida non dovrebbe richiedere altre spiegazioni. I nodi contenuti nel campo children presentano caratteristiche di solidità.

Nodo Anchor

tra le caratteristiche più interessanti, e sicuramente tra le più note, del WWW vi è quella che consente di connettere tra loro una mole impressionante di dati. Come noto, ogni pagina HTML può contenere links ad altre pagine rendendo di fatto il Web un unico immenso ipertesto. Come già accennato nel primo capitolo della presente guida, anche il VRML prevede l’impiego di link a URL remoti di qualsiasi tipo e naturalmente a qualunque altro file di tipo .wrl

Per esempio si potrebbe ipotizzare una semplice caccia al tesoro, creando una città in VRML completa di strade e palazzine. Quando si cerca di entrare in una casa, si clicca su una porta e automaticamente si carica il mondo VRML relativo all'interno della casa prescelta. Si potrebbero prevedere link a file HTML che forniscano dati e informazioni utili alla ricerca. Infine, una volta trovato il tesoro, sarà sufficiente cliccare sulla sua raffigurazione 3D per ottenere l'immediato download di un file compresso in formato .zip ad esempio

Il nodo impiegato è il nodo Anchor e la sintassi relativa è molto semplice:

#VRML V2.0 utf8

# esempio di utilizzo del nodo Anchor

Anchor {
url "anchor2.wrl"
description "Collegamento ad un altro mondo VRML con sfera blu"
children [
Shape {
appearance Appearance {
material Material { emissiveColor 0 1 0 }
}
geometry Box { size 3 3 3 }
}
]
}

àncora.wrl

Il procedimento è forse ancora più semplice di quello necessario alla creazione di un collegamento tra file HTML: l’oggetto che funge da áncora è fornito dal nodo Shape contenuto nel campo children (non ci sono limiti all'impiego di più nodi Shape). L’indirizzo del file è contenuto nel campo url. Il campo description, infine, definisce il testo che apparirà sulla barra di stato del browser quando l’utente porterà l’icona del mouse sopra l'oggetto-link.

Il nodo Inline

Il nodo Inline non introduce nuove caratteristiche al mondo che si sta creando, ma semplicemente consente di strutturare un mondo vrml in piu' files che verranno assemblati online in fase di navigazione.

Un mondo vrml può dunque essere composto da un file principale e da altri files che contengono le diverse parti della scena.

Il nodo Inline contiene i seguenti campi:

  • url
  • bboxCenter
  • bboxsize

Il campo url contiene il riferimento alla locazione del file contenente la porzione da caricare. Il campo può contenere piu' riferimenti. Questo serve a fornire al browser un numero di locazioni alternative alla prima.

I due fields successivi specificano un parallelepipedo predisposto a contenere l'oggetto da caricare. In pratica questo consente al browser di delimitare il volume che l'oggetto andra' ad occupare nel mondo al termine delle operazioni di download.

Lasciando impostati il valore di default per questi due campi, si lascia al browser il compito di determinare le caratteristiche del volume necessario.

Per specificare il punto in cui posizionare l'oggetto occorre, come sempre, utilizzare il nodo transform.

transform {
translation 10 0 0
children [
Inline {
url "abitazione2.wrl"
}
]
}

È evidente che l’impiego del nodo Inline acquisisce senso in special modo quando si progettano mondi piuttosto complessi. In tal caso infatti, ne risulta facilitato lo sviluppo e la possibilità di focalizzare l'attenzione sulle singole parti. Inoltre, poiché il browser renderizza la scena appena finito di caricare il file principale, evidenzierà nel modo indicato precedentemente i volumi che verranno riempiti mano a mano che i relativi files inline verrano caricati. Da parte sua, l'utente potrà cominciare ad esplorare il mondo immediatamente, mentre il modo si arricchira' dei dettagli in modo progressivo.

Pur non costituendo uno strumento di navigazione in senso stretto, il nodo Inline contribuisce sicuramente a facilitare all’utente la navigazione del mondo.

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