Informazioni sulla trasformazione delle coordinate dei modelli 3D
sostanza
Innanzitutto
È possibile visualizzare spesso immagini 3D sugli schermi TV e sui display dei giochi, ma come si visualizzano gli oggetti esistenti nello spazio 3D, come i personaggi e gli edifici che si muovono sullo schermo, su uno schermo 2D?
Nei giochi 2D, ci sono solo elementi bidimensionali di "X e Y" come valori di coordinate, e anche la visualizzazione è 2D, quindi se disegni un oggetto specificando la posizione delle coordinate di X e Y, capirai intuitivamente come verrà disegnato in quale posizione.
Tuttavia, in 3D, non è così facile. Come suggerisce il nome, il 3D è "tridimensionale" e ha tre informazioni sulle coordinate: "X, Y e Z". Poiché le coordinate sono diverse dalla visualizzazione 2D, non è possibile disegnare l'oggetto così com'è.
Quindi, cosa fare è "convertire le informazioni tridimensionali in informazioni bidimensionali". Questa operazione viene comunemente definita "trasformazione delle coordinate". Tenere presente che questa trasformazione delle coordinate è essenziale per la programmazione 3D.
Esistono diversi tipi di trasformazioni di coordinate per la conversione da 3D a 2D, ma ci sono tre tipi principali di trasformazioni di coordinate gestite dai programmatori: "trasformazione globale", "trasformazione vista" e "trasformazione proiezione". Qui spiegheremo tutto ciò che riguarda la trasformazione delle coordinate.
Sistemi di coordinate sinistrorsi e destrorsi
In 3D, ci sono due sistemi di coordinate, il "sistema di coordinate sinistrorso" e il "sistema di coordinate destrorso", che hanno orientamenti diversi per ciascuna coordinata, come mostrato nella figura seguente.
Direct3D usava principalmente un sistema di coordinate sinistrorso, ma sono disponibili anche funzioni per il calcolo per i sistemi di coordinate destrorsi. Tuttavia, XNA fornisce solo metodi di calcolo per i sistemi di coordinate destrorsi. Questo sembra essere in linea con il fatto che altre applicazioni utilizzano spesso sistemi di coordinate destrorsi.
Tutti i suggerimenti XNA in questo sito utilizzano il sistema di coordinate destrorso.
Sistema di Coordinate Locale (Sistema di Coordinate del Modello)
Ogni modello ha un sistema di coordinate centrato sull'origine. Quando si crea un modello con un software di modellazione, penso che sia più facile da capire se si immagina di crearlo con l'origine come centro.
Sistema di Coordinate Globali
Il sistema di coordinate globali consente di posizionare il modello ovunque. Se non si esegue alcuna operazione in questa trasformazione globale, il modello verrà posizionato all'origine allo stesso modo delle coordinate locali. Il posizionamento non consiste solo nello spostamento dall'origine, ma anche nella rotazione e nella scalatura.
Visualizza il sistema di coordinate
Una volta posizionato il modello nelle coordinate assolute, sono necessarie informazioni su dove si sta guardando e dove si sta guardando lo spazio 3D. Questo è ciò che chiamiamo "trasformazioni della vista". Le trasformazioni di visualizzazione sono in genere spesso rappresentate come telecamere.
I parametri necessari per questa conversione sono "posizione della telecamera", "punto di interesse della telecamera" e "direzione verso l'alto della telecamera". L'orientamento della fotocamera è determinato da questi tre parametri. La figura seguente mostra la fotocamera da una prospettiva di terze parti.
La figura sottostante è effettivamente vista dal punto di vista della fotocamera con la disposizione mostrata nella figura sopra (a questo punto, non abbiamo ancora convertito le coordinate sullo schermo, quindi è solo un'immagine).
Nella spiegazione precedente, sembra che la fotocamera sia posizionata e le coordinate vengano trasformate, ma nel calcolo effettivo, le coordinate globali vengono convertite in base alla posizione e all'orientamento della fotocamera. Pertanto, l'origine è la posizione della fotocamera come mostrato nella figura seguente.
Sistema di coordinate proiettive
Una volta deciso da quale posizione visualizzare lo spazio 3D, il passo successivo è quello di elaborare la visualizzazione di "piccoli oggetti che sono lontani" e "grandi cose che sono nelle vicinanze". Questa è chiamata trasformazione proiettiva. Esistono due metodi di trasformazione della proiezione, "proiezione prospettica" e "proiezione ortografica", ma l'immagine comunemente usata per la "proiezione prospettica" è la seguente.
La proiezione prospettica utilizza i seguenti parametri: Angolo di visione, Proporzioni, Posizione clip anteriore e Posizione clip posteriore. L'area etichettata come "frusto" nella figura sopra apparirà finalmente sullo schermo.
"Angolo di visione" specifica il campo di visione visibile dalla telecamera. Diminuendo l'angolo si ingrandisce, aumentandolo si rimpicciolisce. L'angolo di visione sarà il valore verticale del tronco.
Le proporzioni vengono utilizzate per determinare l'angolo di campo orizzontale, mentre l'angolo di visione è un angolo verticale. L'angolo orizzontale è solitamente determinato dall'"angolo di visione × dalle proporzioni" e le proporzioni sono fondamentalmente il valore di "larghezza ÷ altezza" dello schermo che si sta tentando di visualizzare. Se si modifica questo valore, l'oggetto 3D visualizzato sembrerà allungarsi orizzontalmente o verticalmente.
La posizione della clip in avanti e la posizione della clip posteriore vengono specificate per determinare se l'oggetto viene visualizzato nell'intervallo anteriore o posteriore. A causa della natura del computer, non è possibile visualizzare fino all'infinito, quindi imposteremo un limite. Questo valore influisce anche sulla precisione del buffer Z, pertanto non è consigliabile includerlo nell'area di disegno oltre l'intervallo che non deve essere visualizzato.
L'oggetto trasformato in prospettiva viene convertito in uno spazio come quello sottostante. Gli oggetti che erano vicini alla fotocamera vengono ingranditi e gli oggetti che erano lontani vengono ridimensionati.
Questo è illustrato in un diagramma di facile comprensione qui sotto.
Se lo guardi effettivamente dal punto di vista della fotocamera, appare come di seguito.
Un altro metodo di trasformazione proiettiva è la proiezione ortografica, che proietta un'area visibile come quella sottostante. Poiché la larghezza e l'altezza sono costanti indipendentemente dalla profondità, le dimensioni dell'oggetto non cambiano con la profondità.
Sistema di coordinate dello schermo
Dopo la trasformazione della proiezione, viene convertita nelle coordinate dello schermo effettivo. Anche se si tratta di uno schermo, la posizione e la portata del display cambiano a seconda delle impostazioni del viewport impostate sul dispositivo. Tuttavia, nel caso dei giochi, le coordinate del client della finestra sono spesso il viewport così com'è, quindi non credo che dobbiate preoccuparvi troppo.
Le coordinate dello schermo (0, 0) vengono convertite dalle coordinate di proiezione (-1, 1, z). Allo stesso modo, le coordinate dello schermo (larghezza, altezza) vengono convertite dalle coordinate di proiezione (1, -1, z).