|
||||||
ROBOTICA
video
immagini
papers
progettati
costruiti
toolbox
vrml
simulatori
Collision Detection: basta camminare attraverso i muri! |
A questo punto siamo in
grado di costruire mondi abbastanza interessanti. In questo paragrafo e nei
prossimi analizziamo alcuni nodi che ancora ci mancano e che possono essere
utili in fase di modellazione della scena. Ultimata la spiegazione di questi
potremo passare agli aspetti veramente interessanti della versione 2.0 di Vrml,
vale a dire la parte di animazione. Fino a quel punto, di fatto, si sarà introdotto
ben poco in più rispetto a quanto già vrml 1.0 introduceva.
Vediamo ora di risolvere
un problema che era presente in vrml 1.0 e che era piuttosto pesante. Infatti,
a parte aggiunte dei browsers (come Live3d 1.0), l’utente poteva tranquillamente
passare attraverso gli oggetti. In un mondo Vrml 1.0 porre una porta all’ingresso
di una casa risultava un puro fatto estetico ; in ogni caso il visitatore
poteva entrare da dove voleva semplicemente passando attraverso i muri. Dato
che solitamente non ci aspettiamo visitatori con strani poteri e che vogliamo
avvicinarci il più possibile ad un mondo reale questo problema va sistemato.
E Vrml 2.0 offre appunto questa possibilità. Basta aggiungere un nodo Collision
che raggruppi gli oggetti che si vogliono rendere solidi. Vediamo la sintassi
di questo nodo con un banale esempio :
Questo esempio crea un
mondo contenente un cubo. Questa volta però se in fase di navigazione l’utente
si imbatte nell’oggetto non potrà più attraversarlo.
In Live3d 2.0 si può
attivare collision detection anche da menù. In tal caso si applica collision
detection a tutte le primitive, senza che questo sia specificato nel file
vrml. La versione attuale di Cosmo Player (beta 3) non supporta invece Collision
Detection.
La sintassi del nodo
Collision a questo punto del tutorial non dovrebbe richiedere altre spiegazioni.
Tutti i nodi contenuti nel campo children avranno caratteristiche di solidità.
#VRML V2.0 utf8
# semplice esempio di collision detection
Collision {
children [
Shape {
appearance Appearance {
material Material { emissiveColor 1 0 0 }
}
geometry Box { size 1 1 1 }
}
]
}