Proiezione di oggetti 3D su una visualizzazione bidimensionale

Flash Player 10 e versioni successive, Adobe AIR 1.5 e versioni successive

La classe PerspectiveProjection del pacchetto flash.geom fornisce un modo semplice per applicare una prospettiva rudimentale quando si spostano gli oggetti di visualizzazione nello spazio tridimensionale.

Se non create esplicitamente una proiezione prospettica per lo spazio tridimensionale, il modulo 3D utilizza un oggetto PerspectiveProjection predefinito presente nella radice e che viene propagato a tutti i relativi elementi secondari.

Le tre proprietà che definiscono il modo in cui un oggetto PerspectiveProjection visualizza lo spazio tridimensionale sono le seguenti:

  • fieldOfView

  • projectionCenter

  • focalLength

Se modificate il valore di fieldOfView , viene modificato automaticamente il valore di focalLength e viceversa, dal momento che sono proprietà interdipendenti.

La formula usata per calcolare focalLength , dato il valore fieldOfView , è la seguente:

focalLength = stageWidth/2 * (cos(fieldOfView/2) / sin(fieldOfView/2)

Di solito, la proprietà fieldOfView viene modificata esplicitamente.

Campo di visuale

Manipolando la proprietà fieldOfView della classe PerspectiveProjection, potete fare in modo che un oggetto di visualizzazione che si avvicina a chi guarda appaia più grande e che un oggetto che si allontana appaia più piccolo.

La proprietà fieldOfView specifica un angolo compreso tra 0 e 180 gradi che determina l'intensità della proiezione prospettica. Maggiore è il valore, più intensa è la distorsione applicata a un oggetto di visualizzazione che si muove lungo il proprio asse z. Un valore basso per fieldOfView produce una modifica in scala molto ridotta e fa in modo che l'oggetto sembri muoversi solo leggermente all'indietro nello spazio. Un valore elevato per fieldOfView provoca una distorsione superiore e l'impressione di un maggiore movimento. Il valore massimo di 179.9999... gradi genera un effetto tipo obiettivo grandangolo molto pronunciato. Il valore massimo di fieldOfView è 179.9999... e il valore minimo è 0.00001... I valori esatti 0 e 180 non sono validi.

Centro di proiezione

La proprietà projectionCenter rappresenta il fuoco prospettico nella proiezione prospettica. Viene applicata come offset del punto di registrazione predefinito (0,0) nell'angolo superiore sinistro dello stage.

Quando un oggetto sembra allontanarsi da chi guarda, si inclina verso il fuoco prospettico fino a svanire. Immaginate un corridoio lungo all'infinito. Quando guardate in fondo al corridoio, i bordi dei muri convergono in un fuoco prospettico (o punto di fuga) alla fine del corridoio.

Se il fuoco prospettico è al centro dello stage, il corridoio scompare verso un punto al centro. Il valore predefinito della proprietà projectionCenter è il centro dello stage. Se, ad esempio, desiderate che degli elementi appaiano sulla sinistra dello stage e che un'area 3D appaia sulla destra, impostate projectionCenter su un punto sulla destra dello stage per renderlo il fuoco prospettico dell'area di visualizzazione tridimensionale.

Distanza focale

La proprietà focalLength rappresenta la distanza tra l'origine del punto di vista (0,0,0) e la posizione dell'oggetto di visualizzazione sul proprio asse z.

Una distanza focale elevata è simile a un teleobiettivo, che produce una visualizzazione ristretta e distanze compresse tra gli oggetti. Una distanza focale ridotta è simile a un obiettivo grandangolare, che produce una visualizzazione ampia ma molto distorta. Un distanza focale media corrisponde più o meno a ciò che vede l'occhio umano.

Di solito, la proprietà focalLength viene ricalcolata dinamicamente durante la trasformazione prospettica man mano che l'oggetto di visualizzazione si sposta, ma potete anche impostarla esplicitamente.

Valori predefiniti di proiezione prospettica

L'oggetto PerspectiveProjection predefinito creato nella radice ha i valori seguenti:

  • fieldOfView: 55

  • perspectiveCenter: stagewidth/2, stageHeight/2

  • focalLength: stageWidth/ 2 * ( cos(fieldOfView/2) / sin(fieldOfView/2) )

Questi sono i valori che vengono utilizzati se non create un oggetto PerspectiveProjection personalizzato.

Potete creare l'istanza di un oggetto PerspectiveProjection personalizzato con l'intenzione di modificare personalmente projectionCenter e fieldOfView . In tal caso, i valori predefiniti del nuovo oggetto creato sono i seguenti, in base alla dimensione predefinita (500x500) dello stage:

  • fieldOfView: 55

  • perspectiveCenter: 250,250

  • focalLength: 480.24554443359375