Un'interazione che spesso si offre all'utente è la possibilità di muovere la telecamera all'interno del nostro mondo 3D in modo da poterlo esplorare; per esempio, se abbiamo degli oggetti ben realizzati sulla scena che vogliamo siano visibili da diverse angolazioni, oppure quando vogliamo che l'utente si trovi "immerso" nel nostro scenario e possa camminare dentro a esso.
Se vogliamo presentare un oggetto, in modo che l'utente possa guardarlo da tutte le posizioni possibili, possiamo utilizzare una rotazione come abbiamo visto finora o, in alternativa, muovere la telecamera, assicurandoci comunque che punti sempre verso il nostro oggetto.
Possiamo offrire all'utente anche la possibilità di zoomare sull'oggetto.
Questo comportamento viene chiamato "examine" nei player VRML. Proviamo a crearne uno!
Sfruttiamo il cubo, usato come esempio all'interno nelle precedenti lezioni, che presenta delle immagini sulle proprie facce.
Rendiamo possibile visionare il cubo da diverse angolazioni e diamo all'utente la possibilità di zoomare, il tutto tramite tastiera.
Nella funzione init()
inseriamo l'evento onRenderEVENT
, così:
world.addEventListener( World3D.onRenderEVENT,this, camMove );
Con questo codice, per ogni fotogramma, richiamiamo la funzione camMove
:
Listato 76. Imposta i movimenti della telecamera in base ai tasti premutI
function camMove():Void{
var cam:Camera3D = World3D.getInstance ().getCamera ();
// Muoviamo la camera lungo assi X ed Y
if (Key.isDown (Key.UP)){cam.moveUpwards(5);}
if (Key.isDown (Key.DOWN)){cam.moveUpwards(-5);}
if (Key.isDown (Key.LEFT)){cam.moveSideways(5);}
if (Key.isDown (Key.RIGHT)){cam.moveSideways(-5);}
// Muoviamo la camera lungo l'asse Z per lo zoom
if (Key.isDown (Key.HOME)){cam.moveForward(5);}
if (Key.isDown (Key.END)){cam.moveForward(-5);}
cam.lookAt( 0, 0, 0 );
}
Il risultato sarà il seguente
Movimento delle telecamera tramite tastiera
Con le frecce direzionali ruotiamo la telecamera intorno all'oggetto, sfruttando i comandi moveUpwards
e moveSideways
della camera.
Per ogni movimento impostiamo anche la telecamera in modo che punti al centro (dove è il cubo).
I tasti "Home" (inizio) e "End" (fine) vengono utilzizati per lo zoom, effettuato spostando la telecamera sull'asse Z.
Nota: in certe situazioni il valore di rotazione della camera potrebbe risultare non definito e causare un movimento instabile. È un problema conosciuto che può capitare all'interno dei sistemi 3D.
"© Petit Publications 2006" - diritti riservati