Politecnico di Milano - Facoltà del design

Appunti di VRML per gli studenti del laboratorio di computer grafica C2
Parte 2: introduzione ai gruppi; dare un nome ai nodi

© Prof. Giovanni Gigante - Revisione 1 (28 maggio 2003)


Gruppi

Il nodo Group è una specie di "contenitore" che può contenere al suo interno diversi nodi. Al momento non sembra molto utile, ma la sua utilità risulterà chiara più avanti. Per il momento vediamo com'è fatto:

nodo Group (descrizione parziale)
children I nodi che fanno parte del gruppo (delimitati da parentesi quadre, separati da virgole) [ ] (nessuno)

Dare un nome ai nodi

Si può dare un nome a un nodo, precedendone la dichiarazione dalla parola chiave DEF seguita dal nome scelto. Per esempio, per creare un piccolo cubo e dargli il nome "cubetto":

DEF cubetto Shape {
geometry Box { size 1.0 1.0 1.0 }
}

Dopo aver fatto questo, si potrà richiamare il nodo per nome quante volte si vuole, senza doverlo riscrivere ogni volta: basterà scrivere la parola USE seguita dal nome da noi attribuito al nodo. Per esempio, per creare una seconda copia (istanza) del cubo da noi precedentemente battezzato:

USE cubetto

Che si usa come un'abbreviazione equivalente a riscrivere tutta la definizione del cubetto, ossia: Shape { geometry Box { size 1.0 1.0 1.0 } }

Questo sistema è molto comodo per definire una volta sola oggetti e proprietà, e riutilizzarle più volte.

Esempi

Esempio 6: un oggetto cruciforme azzurro

Questo oggetto è costituito da tre parallelepipedi che formano un unico gruppo (Group). Il nodo Appearance che applica il colore rosso viene scritto una volta sola, e usando DEF gli viene attribuito un nome ("coloreazzurro"). In questo modo viene poi applicato alle altre due aste, con USE, senza doverlo riscrivere ogni volta.

#VRML V2.0 utf8
Group {
children [
Shape {
appearance DEF coloreazzurro Appearance {
material Material { diffuseColor 0.2 0.2 1.0 }
}
geometry Box { # l'asta orizzontale
size 6.0 1.0 1.0
}
},
Shape {
appearance USE coloreazzurro
geometry Box { # l'asta verticale
size 1.0 6.0 1.0
}
},
Shape {
appearance USE coloreazzurro
geometry Box { # l'asta ortogonale
size 1.0 1.0 6.0
}
}
]
}