Politecnico di Milano - Facoltà del design
© Prof. Giovanni Gigante - Revisione 1 (28 maggio 2003)
Cambiare la scala a un sistema di assi significa, in pratica, rimpicciolire
o ingrandire ciò che contengono (a seconda se il rapporto di scala è
minore o maggiore di 1). Anche per questo scopo si usa il nodo Transform.
Il campo da usare sarà scale, che accetta tre valori, corrispondenti
alla variazione lungo gli assi X Y Z. Se si danno tre valori uguali, si otterrà
un normale cambiamento in scala, mentre se si danno valori diversi si otterranno
delle deformazioni (cioè, si deforma in una direzione più che
in un altra).
Normalmente, il centro di scala è l'origine degli assi (cioè,
gli oggetti si "gonfiano" o si "restringono" rispetto al
loro centro). Si può però anche specificare un punto diverso,
cosa utile per mantenere fissa una determinata parte dell'oggetto. Per esempio,
se si vuole fare un modello di un albero che cresce, il punto fisso sarà
la base del tronco, in modo che l'albero si estenderà solo verso l'alto,
e non anche verso il basso. Per fare questo si usa il campo center,
che accetta una terna di valori X Y Z (è lo stesso campo center che si
usa per specificare il centro di rotazione).
Si può anche usare questa trasformazione per applicare un cambiamento
di scala rispetto a un sistema di coordinate diverso rispetto ai tre assi standard.
L'effetto pratico sarà una deformazione "diagonale". A tale
scopo si usa il campo scaleOrientation, che in quanto rotazione
richiede quattro numeri (un asse e un angolo). Questa rotazione si applica solo
durante l'operazione di cambiamento di scala, e viene annullata subito dopo.
In pratica, alla fine di questa operazione gli assi saranno immutati, ma l'oggetto
sarà stato deformato nella direzione specificata.
Creiamo una sfera e raddoppiamo le sue dimensioni lungo l'asse verticale (per gli altri due assi specifichiamo un rapporto di scala di 1, che vuol dire nessun cambiamento).
#VRML V2.0 utf8
Transform {
scale 1.0 2.0 1.0
children [
Shape {
appearance Appearance {
material Material { diffuseColor 0.8 0 0.8 }
}
geometry Sphere { }
}
]
}
Creiamo una sfera, e poi facciamone un duplicato grande il doppio, spostandolo un po' verso destra
#VRML V2.0 utf8
Group {
children [
DEF palla Shape {
appearance Appearance {
material Material {
diffuseColor 0.0 0.2 0.8
}
}
geometry Sphere { }
},
Transform {
scale 2 2 2
translation 4 0 0
children [
USE palla
]
}
]
}
Il secondo cono è alto il doppio del primo, ma specifichiamo il centro di trasformazione in corrispondenza della base. In questo modo, il cono si estenderà soltanto verso l'alto, mantenendo la base nella stessa posizione del primo cono.
#VRML V2.0 utf8
Group {
children [
DEF cono Shape {
appearance Appearance {
material Material {
diffuseColor 0 0.8 0
}
}
geometry Cone {
bottomRadius 1
height 2
}
},
Transform {
translation 2 0 0
scale 1 2 1
center 0 -1 0
children [
USE cono
]
}
]
}