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

Variare la luce con gli eventi

Dopo aver visto come si inserisce una luce, all'interno dell'ambiente 3d, vediamo come variare gli effetti della stessa tramite il mouse
Dopo aver visto come si inserisce una luce, all'interno dell'ambiente 3d, vediamo come variare gli effetti della stessa tramite il mouse
Link copiato negli appunti

Andiamo ora a scrivere la funzione setUpControls, dove imposteremo i listener per agire su direzione e intensità della luce in base alla posizione dello slider e al click del mouse. La funzione è la seguente:

Listato 39. Modifichiamo la luce in base ai comandi

function setUpControls(){
    // Controllo della direzione della luce
    Mouse.addListener(this);
    onMouseDown = function() {
        if( _ymouse > 170 ) return;
        var mouseX = _xmouse - 100;
        var mouseY = _ymouse - 100;
        z = 50;
        var v = new Vector( mouseX, mouseY, z );
        var norm = VectorMath.getNorm( v );
        light.setDirection(-mouseX/norm, -mouseY/norm, z/norm);
        cam.rotateY(0);
    }

    // Bottone per accendere / spegnere la luce
    lightButton.onRelease = onOff;

    // controllo dell'intensità della luce
    lightText.text = lightSlider.value;
    var lightCh:Object = new Object();
    lightCh.onChange = setIntensity;
    lightSlider.addListener(lightCh);
}

Abbiamo associato al click (onMouseDown) le azioni per rilevare la posizione del mouse e creare un vettore, dove le coordinate x e y sono calcolate in base alla distanza tra il centro dello schermo e il puntatore del mouse, mentre il valore z è fisso. Poichè la funzione setDirection richiede che i parametri siano normalizzati, sfruttiamo il comando getNorm(), quindi dividiamo per tale valore le componenti x, y e z. Il comando cam.rotateY(0) è utilizzato per forzare il ri-calcolo della scena, in modo da mostrare i cambiamenti in tempo reale.

Nel codice abbiamo inserito anche i richiami alla funzione onOff, che semplicemente si occupa di accendere o spegnere la luce, con questo codice:

Listato 40. Accende e spegne la luce

function onOff(){
    lightOn = ! lightOn;
    lightButton.setLabel ( lightOn ? "Off" : "On" );
    skin.setLightingEnable( lightOn );
}

E alla funzione setIntensity, che imposta la forza della luce in base al valore dello slider, grazie alle seguenti azioni:

Listato 41. Imposta la forza della luce in base al valore dello slider

function setIntensity(){
    lightText.text = lightSlider.value;
    light.setPower( lightSlider.value );
    cam.rotateY(0);
}

Questa funzione semplicemente sfrutta il comando setPower di Sandy per impostare l'intensità della luce in base al valore dello slider, che è impostato per andare da 0 a 150. Ecco il risultato:

La luce applicata nel filmato, con i comandi per modificarla

Ovviamente è possibile applicare la luce anche nel caso in cui il cubo abbia una skin con un'immagine:

Listato 42. Applica la luce nel caso di cubo con skin

this.attachMovie("image","imageholder",this.getNextHighestDepth());
imageholder._alpha = 0; // hide image on the Stage
var texture:BitmapData = new BitmapData( imageholder._width, imageholder._height);
texture.draw( this.imageholder );
skin = new TextureSkin( texture );

Assegniamo al cubo una texture, e il risultato è questo:

La luce applicata ad un cubo con texture

"© Petit Publications 2006" - diritti riservati

Ti consigliamo anche