Il nodo Billboard è un "grouping node" (come lo sono anche i nodi transfrom
e Collision). Questo significa che all'interno del suo campo children
possono essere dichiarati diversi nodi. Lo scopo del nodo Billboard consiste
nel fare in modo che uno o più oggetti siano in grado di ruotare attorno ad
un asse in base alla posizione dell'osservatore.
Una applicazione molto frequente del nodo Billboard riguarda la simulazione
di alberi. Infatti, simulare un albero definendone le parti tramite nodi Shapes
richiede sicuramente un lavoro lungo e complesso, anche utilizzando strumenti
di modellazione 3D; inoltre il risultato finale porta inevitabilmente ad un
considerevole aumento delle dimensioni del file. Con Billboard è possibile
definire un quadrilatero sul quale viene "mappata" la texure trasparente rappresentante
l'albero in questione. Dopodiché, non si deve far altro che specificare un'asse
di rotazione pari all'asse y. In questo modo, quando l'utente si muoverà attorno
al quadrilatero, questo ruoterà in maniera conseguente, in modo da offrire alla
sua vista sempre la texture rappresentante l'albero.
Ecco i campi del nodo:
axisOfRotation
children
bboxCenter
bboxsize
addChildren
removeChildren
Il significato del campo axisOfRotation è estremamente chiaro e non
necessita di spiegazioni, mentre il campo children non dovrebbe costituire
una novità per chi ha seguito i precedenti capitoli.
I campi bboxCenter e bboxsize servono per definire la "bounding
box" (in italiano: il parallelepipedo che congloba gli oggetti considerati).
Il campo bboxsize prevede la possibilità di inserire un valore di default
(-1 -1 -1) indicante al browser di procedere a calcolare in modo automatico
la dimensione della bounding box.
Gli ultimi due campi: addChildren e removeChildren, sono degli
eventIn e possono essere impiegati per modificare in tempo reale le caratteristiche
del campo children aggiungendo o togliendo nodi all'interno del campo stesso.
Di seguito riportiamo un semplice esempio di impiego del nodo Billboard
che non utilizza gli ultimi due campi citati:
#VRML V2.0 utf8
#esempio di utilizzo del nodo Billboard
DirectionalLight {
direction 0 -1 -1
}
Viewpoint {
position 0 2 40
orientation 0 0 0 0
description "Vista iniziale"
}
# creazione del background
Background {
skyAngle [1 1.57 3.14]
skyColor [0 0 1, 0 0 1, .6 .6 1, 0 0 1]
groundAngle [ 0 1.57]
groundColor [0 1 0, 0 .8 0, 0 .6 0]
}
# un semplice piano come prato
Shape {
appearance Appearance {
material Material { diffuseColor 0 .88 0 }
}
geometry Box { size 60 .01 60 }
}
# il box dell'albero
transform {
translation 0 9.75 0
children [
Billboard {
axisOfRotation 0 1 0
children [
Shape {
appearance Appearance {
material Material { diffuseColor .7 .7 1 }
texture ImageTexture {
url "tree.gif"
}
}
geometry Box { size 14.4 19.5 .01 }
}
]
}
]
}