Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 49 di 51
  • livello principiante
Indice lezioni

Volare attraverso il mondo

Capita spesso che in un applicazione 3d dobbiamo lasciare libertà all'utente di spostarsi come meglio crede. In questa lezione, oltre a vedere come spostarsi, vediamo anche come volare attraverso il mondo.
Capita spesso che in un applicazione 3d dobbiamo lasciare libertà all'utente di spostarsi come meglio crede. In questa lezione, oltre a vedere come spostarsi, vediamo anche come volare attraverso il mondo.
Link copiato negli appunti

È tutt'altro che raro, specialmente in giochi o in modelli architettonici, che l'utente possa camminare o volare all'interno del mondo tridimensionale.

Per questo esempio useremo la stessa scena sfruttata nell'esempio per i filtri (ma senza filtro blur); la scena è stata però modificata leggermente in maniera da mostrare meglio il pavimento del mondo.

Per muoverci, anche questa volta, associamo una funzione all'evento onRenderEVENT

world.addEventListener( World3D.onRenderEVENT,this, cameraMove );

La funzione cameraMove ha invece il seguente codice:

Listato 77. Imposta le azioni in base ai tasti premuti

function cameraMove(){
    if (Key.isDown (Key.UP)) { cam.moveForward(20); }
    if (Key.isDown (Key.DOWN)) { cam.moveForward(-20); }
    if (Key.isDown (Key.LEFT)) { cam.rotateY(-3); }
    if (Key.isDown (Key.RIGHT)) { cam.rotateY(3); }
    // Altezza da terra
    if (Key.isDown (Key.PGUP)) { cam.moveUpwards(-3); }
    if (Key.isDown (Key.PGDN)) { cam.moveUpwards(3); }
}

Il codice è simile all'esempio precedente, in questo caso le frecce sono usate per muovere la telecamera o per ruotarla lungo il suo asse y. Utilizzando i tasti PageUp (pagina su) e PageDown (pagina giù) sarà possibile cambiare l'altezza da terra della telecamera.

Ecco il risultato:

Movimento delle telecamera all'interno del mondo

In alcuni casi è più comodo e veloce navigare usando il mouse. Possiamo includere questa possibilità controllando se il mouse sia o menu premuto e di conseguenza abilitando o meno il movimento, così:

Listato 78. Include gli eventi del mouse

onMouseDown = function(){
    // Quando il mouse è premuto attiva il movimento via mouse
    moving = true;
}
onMouseUp = function(){
    // Se il mouse non è premuto, il movimento avviene via tastiera
    moving = false;
}

Aggiungiamo anche questo codice alla funzione cameraMove:

Listato 79. Calcola la distanza

if( moving ){
    var rot = ( _xmouse - midX )/100;
    var forward = ( midY - _ymouse )/5;
    cam.moveForward( forward );
    cam.rotateY( rot );
}

La distanza tra l'origine e la posizione X del mouse viene divisa e utilizzata per la rotazione sull'asse Y, mentre la distanza tra l'origine e la posizione Y del mouse viene divisa in maniera minore ed è usata per i movimenti avanti e indietro.

Il fattore di divisione può essere variato per rendere i movimenti e le rotazioni più o meno rapidi: non c'è una regola generale sui valori ottimali, bisogna provare per trovare la soluzione migliore per le proprie esigenze.

"© Petit Publications 2006" - diritti riservati

Ti consigliamo anche