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

View e Projection: posizione, target e frustum della camera

Definire l'orientamento, l'obiettivo puntato dalla telecamera e il suo campo visivo
Definire l'orientamento, l'obiettivo puntato dalla telecamera e il suo campo visivo
Link copiato negli appunti

Cominciamo ad occuparci di uno dei componenti principali della nostra scena 3D: la telecamera. Disegnare una scena in tre dimensioni è un pò come realizzare un film con una telecamera a mano: possiamo ruotare o inclinare lateralmente la telecamera, avvicinarci o allontanarci rispetto ad un certo oggetto, allargare o restringere l'inquadratura, e così via. Nel mondo XNA, queste proprietà sono contenute in due oggetti di tipo Matrix: View e Projection.

La matrice View

La prima contiene le informazioni relative alla posizione della telecamera nello spazio tridimensionale, alla direzione in cui l'obiettivo è puntato, nonché all'orientamento della telecamera stessa (Figura 1, immagine di destra).

Figura 1. Sistemi di riferimento della telecamera
Sistemi di riferimento della telecamera

Per creare una matrice View, si può utilizzare l'apposito metodo CreateLookAt, il quale accetta tre parametri:

public static Matrix CreateLookAt (
         Vector3 cameraPosition,
		 Vector3 cameraTarget,
		 Vector3 cameraUpVector
);

Parametro Descrizione
cameraPosition indica la posizione della telecamera rispetto all'origine degli assi (0, 0, 0). Valori positivi per uno dei tre assi corrispondono a spostamenti, rispettivamente, verso destra, verso l'alto e verso l'esterno dello schermo (ossia verso lo spettatore). Al contrario, per valori negativi avremo spostamenti verso sinistra, verso il basso o verso l'interno dello schermo (Figura 2)
cameraTarget indica il punto dello spazio verso il quale la telecamera è puntata. Ad esempio, se assegnamo alla variabile il valore (0, 0, 0), la telecamera punterà verso il punto di origine dei tre assi, e continuerà a farlo anche se la muoveremo o la ruoteremo
cameraUpVector rappresenta l'asse verticale della telecamera, che non necessariamente coincide con l'asse verticale della scena. Se infatti incliniamo la telecamera in una qualsiasi direzione, anche l'inclinazione del suo asse verticale si modificherà di conseguenza

Imparare a gestire la matrice View manualmente è fondamentale per realizzare telecamere in prima o terza persona e per spostarle in base all'input dell'utente.

Figura 2. Effetto dei parametri del metodo CreateLookAt
Effetto dei parametri del metodo CreateLookAt

La matrice Projection

La matrice Projection, invece, contiene una serie di informazioni relative al "campo visivo" della telecamera, detto anche "frustum" per la sua forma a tronco di piramide ( Figura 3). In buona sostanza, il frustum (espresso in radianti) definisce un'area tridimensionale che è visibile dalla telecamera e che verrà dunque disegnato a schermo (un pò come scegliere, per il proprio obiettivo, una lente piuttosto che un'altra). Tutto ciò che risulta invece collocato al di fuori del campo visivo non verrà renderizzato. Sempre la matrice projection è destinata inoltre a contenere una serie di informazioni relative al cosiddetto "aspect ratio", ossia al rapporto tra larghezza e altezza del campo visivo (che è pari a 800:480, nel caso di un gioco per Windows Phone 7 con il device disposto orizzontalmente), nonché informazioni sui valori minimi e massimi di distanza dalla telecamera (potremmo definirle, un pò impropriamente, informazioni sulla sua "profondità di campo"), superati i quali gli oggetti non verrano più renderizzati sulla scena (si parla, rispettivamente, di near clipping plane, indicato dalla lettera a nella Figura 3, e di far clipping plane, indicato dalla lettera b).

Figura 3. Il Frustum
Il Frustum

Ti consigliamo anche