Condividi tramite


Viewport e ritaglio

Un riquadro di visualizzazione è un rettangolo bidimensionale (2D) in cui viene proiettata una scena 3D. In Direct3D il rettangolo esiste come coordinate all'interno di una superficie Direct3D usata dal sistema come destinazione di rendering. La trasformazione della proiezione converte i vertici nel sistema di coordinate usato per il riquadro di visualizzazione. Viene usato anche un riquadro di visualizzazione per specificare l'intervallo di valori di profondità in una superficie di destinazione di rendering in cui verrà eseguito il rendering di una scena (in genere da 0,0 a 1,0).

Frustum di visualizzazione

Un frustum di visualizzazione è un volume 3D in una scena posizionata rispetto alla fotocamera del riquadro di visualizzazione. La forma del volume influisce sul modo in cui i modelli vengono proiettati dallo spazio della fotocamera sullo schermo. Il tipo più comune di proiezione, una proiezione prospettica, è responsabile della creazione di oggetti vicino alla fotocamera, che appaiono più grandi rispetto agli oggetti a distanza. Per la visualizzazione prospettica, il frustum di visualizzazione può essere visualizzato come una piramide, con la fotocamera posizionata sulla punta, come illustrato nella figura seguente. Questa piramide è intersecata da un piano di ritaglio anteriore e posteriore. Il volume all'interno della piramide tra i piani di ritaglio anteriore e posteriore è il frustum di visualizzazione. Gli oggetti sono visibili solo quando si trovano in questo volume.

illustrazione di un frustrum di visualizzazione con un piano di ritaglio anteriore e posteriore

Se immagini di trovarti in una stanza buia e di guardare attraverso una finestra quadrata, stai visualizzando un tronco di osservazione. In questa analogia, il piano di ritaglio vicino è la finestra, mentre il piano di ritaglio posteriore è qualunque cosa interrompa la vista: il grattacielo dall'altra parte della strada, le montagne in lontananza o niente del tutto. È possibile vedere tutto all'interno della piramide troncata che inizia dalla finestra e termina con qualsiasi interruzione della vista, e non si può vedere altro.

Il frustum di visualizzazione è definito dal fov (campo di visualizzazione) e dalle distanze dei piani di ritaglio anteriore e posteriore, specificati nelle coordinate z, come illustrato nel diagramma seguente.

diagramma del frustum di visualizzazione

In questo diagramma, la variabile D è la distanza dalla telecamera all'origine dello spazio definito nell'ultima parte del processo geometrico: la trasformazione della visualizzazione. Questo è lo spazio attorno al quale disponi i limiti del frustum di visualizzazione. Per informazioni sull'uso di questa variabile D per compilare la matrice di proiezione, vedere trasformazione Proiezione

Rettangolo del riquadro di visualizzazione

Una struttura viewport contiene quattro elementi (X, Y, Larghezza, Altezza) che definiscono l'area della superficie di destinazione del rendering in cui verrà eseguito il rendering della scena. Questi valori corrispondono al rettangolo di destinazione o al rettangolo del riquadro di visualizzazione, come illustrato nel diagramma seguente.

diagramma del rettangolo del riquadro di visualizzazione

I valori specificati per gli elementi X, Y, Larghezza e Altezza sono coordinate dello schermo relative all'angolo superiore sinistro della superficie di destinazione del rendering. La struttura definisce due membri aggiuntivi (MinZ e MaxZ) che indicano gli intervalli di profondità in cui verrà eseguito il rendering della scena.

Direct3D presuppone che il volume di ritaglio del riquadro di visualizzazione sia compreso tra -1,0 e 1,0 in X e da 1,0 a -1,0 in Y. Queste erano le impostazioni usate più spesso dalle applicazioni in passato. È possibile regolare le proporzioni del riquadro di visualizzazione prima di ritagliare usando la trasformazione di proiezione.

Nota MinZ e MaxZ indicano gli intervalli di profondità in cui verrà eseguito il rendering della scena e non vengono usati per il ritaglio. La maggior parte delle applicazioni imposta questi valori su 0.0 e 1.0 per consentire al sistema di eseguire il rendering sull'intero intervallo di valori di profondità nel buffer di profondità. In alcuni casi, è possibile ottenere effetti speciali usando altri intervalli di profondità. Ad esempio, per eseguire il rendering di una visualizzazione heads-up in un gioco, puoi impostare entrambi i valori su 0,0 per forzare il rendering degli oggetti in una scena in primo piano oppure puoi impostarli entrambi su 1.0 per eseguire il rendering di un oggetto che deve sempre trovarsi in background.

 

Le dimensioni utilizzate nei membri X, Y, Larghezza e Altezza di una struttura della finestra definiscono la posizione e le dimensioni della finestra sulla superficie di destinazione del rendering. Questi valori sono in coordinate dello schermo, rispetto all'angolo superiore sinistro della superficie.

Direct3D usa la posizione e le dimensioni del riquadro di visualizzazione per ridimensionare i vertici per adattare una scena sottoposta a rendering nella posizione appropriata sulla superficie di destinazione. Internamente, Direct3D inserisce questi valori nella matrice seguente applicata a ogni vertice.

equazione della matrice applicata a ogni vertice

Questa matrice ridimensiona i vertici in base alle dimensioni del riquadro di visualizzazione e all'intervallo di profondità desiderato e li converte nella posizione appropriata sulla superficie di destinazione di rendering. La matrice capovolge anche la coordinata y per riflettere un'origine dello schermo nell'angolo superiore sinistro con y crescente verso il basso. Dopo l'applicazione di questa matrice, i vertici sono ancora omogenei, ovvero esistono ancora come vertici [x,y,z,w] e devono essere convertiti in coordinate non omogenee prima di essere inviate al rasterizzatore.

Nota Le applicazioni impostano in genere MinZ e MaxZ rispettivamente su 0.0 e 1.0 per fare in modo che il sistema esegua il rendering nell'intero intervallo di profondità. Tuttavia, è possibile usare altri valori per ottenere determinati effetti. Ad esempio, è possibile impostare entrambi i valori su 0,0 per forzare tutti gli oggetti in primo piano o impostare entrambi su 1.0 per eseguire il rendering di tutti gli oggetti in background.

 

Cancellazione di un riquadro di visualizzazione

La cancellazione del riquadro di visualizzazione reimposta il contenuto del rettangolo del riquadro di visualizzazione sulla superficie di destinazione di rendering. Può anche cancellare il rettangolo nelle superfici del buffer depth e stencil.

Configurare il riquadro di visualizzazione per il ritaglio

I risultati della matrice di proiezione determinano il volume di ritaglio nello spazio di proiezione come segue:

-wc<= xc<= wc

-wc<= yc<= wc

0 <= zc<= wc

Dove: x, y, z e w rappresentano le coordinate dei vertici dopo l'applicazione della trasformazione di proiezione. Tutti i vertici con un componente x, y o z all'esterno di questi intervalli vengono ritagliati, se il ritaglio è abilitato (comportamento predefinito).

Sistemi di coordinate e geometria