Gli assi delle coordinate
All'interno di un mondo realizzato con Sandy, come in un sistema di coordinate cartesiano, ci sono gli assi x, y e z. Per convenzione l'asse X punta verso destra, l'asse Y verso l'alto e l'asse Z "verso" lo schermo; tutti i nuovi oggetti sono creati alle coordinate 0,0,0.
Quando creiamo una camera, questa è posizionata sull'origine degli assi (che come detto è a 0,0,0) e punta verso l'interno dello schermo. Per vedere gli oggetti dobbiamo spostarla negativamente sull'asse Z (in modo da "allontanarla" dall'origine degli assi e vedere gli oggetti che vengono creati).
Nella lezione precedente abbiamo visto come creare una linea, possiamo quindi utilizzare la primitiva line3D per rappresentare visivamente il sistema di coordinate all'interno di Sandy. Aggiungiamo pertanto questo codice all'interno della funzione createScene()
Listato 6. rappresentazione sistema di coordinate all'interno di Sandy
// Creiamo tre nuove linee, che rappresenteranno gli assi
var xAxis:Object3D = new Line3D( new Vector(-150,0,0), new Vector(150,0,0) );
var yAxis:Object3D = new Line3D( new Vector(0,-150,0), new Vector(0,150,0) );
var zAxis:Object3D = new Line3D( new Vector(0,0,-150), new Vector(0,0,150) );
// Diamo un colore a ogni linea
xAxis.setSkin( new SimpleLineSkin( 1, 0xff0000, 100 ) ); // rosso
yAxis.setSkin( new SimpleLineSkin( 1, 0x00ff00, 100 ) ); // verde
zAxis.setSkin( new SimpleLineSkin( 1, 0x0000ff, 100 ) ); // blu
// Creiamo un nuovo gruppo e inseriamo le linee al suo interno
var coords:Group = new Group();
coords.addChild(xAxis);
coords.addChild(yAxis);
coords.addChild(zAxis);
// Aggiungiamo il gruppo creato al gruppo principale
bg.addChild(coords);
Analizzando il codice, vediamo come tutte le linee siano lunghe 300 pixel (da -150 a +150) sul rispettivo asse. Abbiamo dato alle linee un colore diverso per poterle identificare all'interno del filmato, inoltre, non essendo necessaria nessuna trasformazione, sono state aggiunte al gruppo principale e in precedenza inserite all'interno di un altro gruppo (coords) in modo da averle tutte insieme e poterle gestire come un unico oggetto (per esempio se vogliamo rimuoverle basta usare removeChild(coords)
).
Poichè lo scopo di questo codice è rappresentare visivamente i tre assi, il gruppo coords non verrà trasformato.
Nota: finchè manteniamo la telecamera sull'asse Z (come da impostazione predefinita), vediamo solo gli assi X ed Y. Per vedere anche l'asse Z, dobbiamo riposizionare la telecamera, per esempio possiamo spostarla con il seguente codice:
cam.setPosition(50,50,-500);
cam.lookAt(0,0,0);
Il comando lookAt è necessario perchè, spostando la telecamera con il primo comando (setPosition), la visuale non sarebbe più sull'origine, ma sarebbe ancora parallela all'asse Z. Per visualizzare l'origine degli assi (e quindi le linee create in precedenza) abbiamo utilizzato il comando lookAt
(i cui parametri sono le coordinate x, y e z a cui la telecamera deve puntare). Approfondiremo più avanti nell'articolo i movimenti di camera in Sandy.
Il risultato che otteniamo con la creazione dei tre assi (oltre alla linea già creata in precedenza) e lo spostamento della telecamera è il seguente.
Le linee rappresentanti gli assi delle coordinate
Notiamo in particolare l'asse Z, quello relativo alla profondità (disegnato in blu), che può essere sfruttato per stabilire la distanza di un oggetto dalla telecamera e di conseguenza dal punto di vista dell'osservatore.
"© Petit Publications 2006" - diritti riservati