Articoli

papervision3D - Impostazioni di base della fotocamera

logoPV3D

Non solo le primitive ereditano le proprietà e i metodi di DisplayObject3D, ma anche la classe CameraObject3D, che è la classe super di Camera3D. Per riassumere, Camera3D eredita da CameraObject3D, che a sua volta eredita da DisplayObject3D.
Che cosa significa? Poiché ogni fotocamera eredita le x, y, z e le proprietà da DisplayObject3D, siamo in grado di muoverci sugli assi del sistema di coordinare della scena (spazio mondo). Inoltre, è possibile ruotare la camera nello stesso modo in cui si può ruotare qualsiasi altra istanza di DisplayObject3D. Anche se la fotocamera non ha una rappresentazione visiva sullo schermo, abbiamo un sacco di strumenti per manipolarla. La fotocamera possiede anche alcune proprietà e metodi che nessun altro do3D ha.

Le impostazioni di base che in modo specifico caratterizzano le telecamere sono:
• zoom
• fuoco
• campo visivo
• vicini e lontani
Per familiarizzare con queste impostazioni, brevemente esaminaremo alcuni principi fondamentali della grafica 3D computerizzata. Ci sarà poi da visionare una demo per ottenere una migliore comprensione di come le impostazioni siano in relazione tra loro.
L'illustrazione seguente mostra la fotocamera e ciò che vede. Si noti  prende una forma piramidale, tagliata da un piano lontano e da un piano vicino. Lo spazio all'interno della piramide tronca è quindi il campo di visualizzazione. I piani vicini e lontani sono i piani immaginari che delimitano il tronco.camera

Ora, diamo uno sguardo a come il tronco si relaziona allo sprite finestra in cui tutto il contenuto del spazio del tronco viene disegnato. Diversi programmi 3D hanno modi diversi di impostare la finestra. In Papervision3D la finestra è impostata sul piano vicino. Pertanto, anche se la finestra è uno sprite 2D e il piano è un piano vicino, immaginario e perpendicolare alla telecamera, i due sono virtualmente collegati. Ora, immaginiamo di aggiungere un cubo alla nostra scena. Nella figura seguente si può vedere il cubo all'interno del tronco, contenente le informazioni 3D come il numero e la posizione di vertici e il materiale ad esso assegnato. Papervision3D proietta i vertici sulla finestra 2D e renderizza il cubo in modo che lo possiamo vedere sul nostro schermo.
cameracubo

Il tronco è l'area 3D visibile sullo schermo, quindi gli oggetti al di fuori del tronco non appaiono sullo schermo. Sarebbe uno spreco di risorse se Papervision3D renderizzasse gli oggetti che sono al di fuori del tronco. Il processo di identificazione di ciò che è dentro tronco di rendering  e tutto ciò che è fuori è conosciuto come abbattimento, ed è cruciale nell'ottimizzazione delle applicazioni 3D. Si risparmia un sacco di lavoro, se Papervision3D non renderizza tutti i vertici che non possiamo vedere comunque. L'abbattimento sarà discusso nel dettaglio alla fine di questa sezione.

Focus e campo visivo

Il Focus è un numero positivo che rappresenta la distanza tra la fotocamera e il piano vicino (e quindi la nostra viewport). In sostanza è la distanza più breve possibile tra la osservatore e un oggetto visibile.
Il campo visivo è l'angolo verticale della vista della fotocamera espresso in gradi. laseguente illustrazione mostra che c'è una relazione tra la messa a fuoco, campo di vista e l'altezza della viewport:

focus

Un valore di fuoco più alto aumenta la distanza tra la fotocamera e il piano vicino.
L'effetto è che gli oggetti vicini e lontani  sembrano essere più vicini gli uni agli altri, indipendentemente dall' effettiva distanza tra loro. Inoltre, il campo di vista genererà  oggetti più piccoli come si può vedere nella figura seguente:

focus2

Abbassare il fuoco aumenta il campo visivo. Questo è come utilizzare un obiettivo più ampio con il risultato di una vista esagerata, dove gli oggetti vicini sembrano essere oggetti più grandi e quelli distanti sembrano essere più piccoli di quello che sono. Una messa a fuoco molto bassa porta alla distorsione della prospettiva in cui le linee parallele sembrano convergere. In fotografia si può ottenere immagini estremamente ampie usando un obiettivo fisheye, che è popolare appunto per la sua prospettiva distorta.
La messa a fuoco è eseguita come segue:

camera.focus = 12;

A causa del modo in cui vengono inizializzati diversi tipi di telecamere, il valore predefinito di camera.focus possono variare. Il valore predefinito è di circa 8.66 in tutti i tipi che si discuterà da qui a un po', fatta eccezione per la fotocamera di debug dove il valore predefinito è 10.
Utilizzare la proprietà fov per impostare il campo visivo.

camera.fov = 90;

Il costruttore della classe Camera3D ha un parametro di default che è FOV a 60.
Ma, come abbiamo visto, uno dei fattori che definiscono il campo di vista è l'altezza della la finestra. Tuttavia, la larghezza e l'altezza della della viewport vengono impostati da voi  sviluppatori e può variare in base alla applicazione. Pertanto, è probabile che anche se non si imposta un valore per FOV e poi lo si traccia, si otterrà un output diverso da quello predefinito di 60.

Zoom

Zoom è un concetto familiare alla maggior parte di noi. Quando si esegue lo zoom di una foto o video, l'immagine che vedete nel visualizzatore si ingrandisce . L'intera scena si ingrandisce senza muovere la fotocamera verso la scena. Le distanze tra gli oggetti vicini e lontani sembrano diminuire e ciò porta a una visione più compressa. Lo stesso accade in Papervision3D quando si aumenta il valore di zoom di una telecamera si ingrandisce l'immagine renderizzata.
Date un'occhiata alla figura seguente. Lo zoom della telecamera che ingrandisce gli oggetti si realizza nella regione rappresentata dal piccolo rettangolo bianco. Si può vedere che se anche manteniamo la messa a fuoco uguale abbiamo bisogno di renderizzare il campo di vista oggetti più piccoli al fine di rendere gli oggetti che vediamo apparire più grandi.

zoom

Il valore predefinito di zoom è impostato a 40, ma è possibile regolare a proprio piacimento. Nel carosello che abbiamo costruito in precedenza, abbiamo cambiato lo zoom della fotocamera per avere una visuale migliore per il carosello.

camera.zoom = 80;

Interazione tra zoom, focus e campo visivo 

Come abbiamo visto, zoom, messa a fuoco, e campo visivo sono chiaramente correlate tra loro.
Cambiare uno di questi porta a risultati diversi.
• Se si diminuisce o lo zoom o la messa a fuoco, il campo visivo aumenta
• Se si aumenta lo zoom o la messa a fuoco, il campo visivo si riduce
• Aumentare o diminuire il campo visivo riduce o aumenta il focus, ma non cambia lo zoom

Ma cosa significa tutto questo per la nostra percezione della scena? Per ottenere una migliore comprensione su ciò che accade visivamente, aprite CameraSettingsDemo.swf. Vedrete una Numero di piani rossi, quattro a sinistra e quattro a destra. Ce n'è anche uno blu insieme lontano sull'asse z. Giocare con i cursori può essere utile per la comprensione del rapporto tra lo zoom, messa a fuoco, e campo visivo. si può anche regolare la coordinata z della fotocamera. Se si sposta lo slider dello zoom, messa a fuoco o campo visivo , si può vedere come gli altri valori sono in corso di aggiornamento, come  illustrato in precedenza nell'elenco puntato.
Per il set di zoom a 12, messa a fuoco a 6, e la posizione z a -160. Questo vi darà una pesante distorsione del punto di vista con una vista molto profonda.
D'altro canto impostando lo zoom a 60, messa a fuoco a 55 e fotocamera a -2500 si traduce in una vista molto compressa.

Vicini e lontani

Il tronco di piramide che definisce il tronco è tagliato fuori dai piani vicino e il lontano . La distanza dalla telecamera a entrambi i piani è definita dalle proprietà vicino e lontani. Come il focus definisce anche la distanza tra la fotocamera e il piano vicino, il piano vicino e il focus sono equivalenti. L'impostazione della proprietà vicino fa esattamente la stessa cosa della messa a fuoco.

camera.near = 30;

La proprietà lontano è la distanza tra la telecamera e il piano lontano. L'impostazione di questa è la seguente:

camera.far = 15000;

Supponiamo che si sta costruendo un gioco con molti oggetti in uno spazio molto ampio e profondo.
Gli oggetti possono essere vicino alla telecamera, ma possono anche essere così lontani che non si può o quasi vederli sullo schermo. Ma gli oggetti saranno disegnati in ogni caso, non importa quanto distanti sono. Poiché ci sono così tanti triangoli da disegnare, il processo di rendering può essere molto difficile sul computer di un utente. Portare il piano molto più vicino alla telecamera si tradurrebbe in un minor numero di gli oggetti all'interno del tronco e meno triangoli per il rendering.
E' importante tenerne conto quando si crea un gioco o qualsiasi altra applicazione 3D.
Alcuni giochi inoltre danno al giocatore la possibilità di impostare la distanza del piano lontano. Se un utente dispone di un computer che non è così veloce può decide di portare il piano molto più vicino alla telecamera, il risultato sarà una performance migliore della CPU e un gioco più divertente.
Per evitare che gli oggetti vengano renderizzati quando sono al di là del piano lontano è necessario impostare camera.useCulling su true.
discuteremo la proprietà useCulling in seguito nella sezione Culling.
Un'altra proprietà che è possibile utilizzare quando si lavora con la telecamera è il target . Vediamo cosa è di esaminando il tipo di telecamere che Papervision3D mette a disposizione.

Filippo Porcari
Author: Filippo PorcariWebsite: http://filippo.porcari.oranjuice.org/Email: Questo indirizzo email è protetto dagli spambots. E' necessario abilitare JavaScript per vederlo.
designer freelance
Sono un graphic designer e mi occupo di pubblicità. Da più di 10 anni dedico le mie energie alla realizzazioni d'immagine aziendale e comunicazione visiva con un'attenzione alle nuove tecnologie del web. Da qualche anno ho scoperto il software open source e mi sono dedicato alla sua introduzione nel mio workflow produttivo ottenendo ottimi risultati.

© copyright 2011

Porcari Filippo studio grafico - p.iva 01985590023

Tutti i diritti riservati.