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).
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.
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).