X, Y, Z coordinate standard?


12

Sono piuttosto nuovo allo sviluppo 3D di qualsiasi tipo, comunque. Mentre leggo tutorial ed esempi, scopro che le coordinate X / Y / Z sembrano un po 'arretrate rispetto alla mia prima ipotesi.

Avevo immaginato che se una persona stesse camminando attorno a un campo, la sua posizione X / Y sarebbe cambiata e se avessero saltato o camminato su o giù per una collina, allora la loro posizione Z sarebbe cambiata. Le mie assunzioni sembrano essere sbagliate perché camminare intorno a un campo sembra cambiare X / Z e saltare o andare su / giù per una collina altera la Y.

1) Le mie osservazioni sono corrette? Il 3D è nuovo per me e potrei non pensare bene alle cose.

2) Qual è la logica dietro il movimento orizzontale essendo X / Z e il movimento verticale essendo Y?

3) Sarebbe così sbagliato da parte mia usare X / Y come movimento orizzontale e Z come movimento verticale in XNA Framework?


Sistemi di coordinate mano sinistra / destra. DirectX è la mano sinistra, il valore predefinito in OpenGL è la mano destra.
Jonathan Connell,

Risposte:


19

I tuoi presupposti non sono sbagliati: ogni motore tratta queste coordinate in modo diverso. In generale X è quasi sempre l'asse Est-Ovest, ma se Y o Z è l'asse Altitudine tende a variare. A quanto ho capito, Quake 3, il motore di origine e il motore di coppia hanno tutti Z su. Anche lo strumento di modellazione 3DS Max. Non è raro.

È logico disporre di un sistema di coordinate ordinato approssimativamente in ordine decrescente di importanza, in modo che l'appiattimento di una rappresentazione in meno dimensioni sia più semplice da comprendere. Ad esempio, se il tuo gioco è impostato su una mappa di altezza 2D, ha senso che Z sia "in alto", perché le coordinate X e Y nella mappa del mondo 3D direttamente alle coordinate X e Y sulla mappa di altezza. D'altra parte, se pensi principalmente in termini di rendering (e molti sviluppatori di motori di gioco fanno), sei abituato a X e Y come coordinate dello schermo, quindi l'aggiunta di un 3 ° asse va naturalmente dentro o fuori dallo schermo.

Usa ciò che è più semplice per te, ma tieni presente che ogni scelta è arbitraria e che potresti dover convertire tra di loro e utilizzare più sistemi di coordinate all'interno di un programma.


In realtà mi piacciono di più le altre due risposte, ma poiché questa è la risposta accettata, una nota per sottolineare che Y è verticale e Z che si trova sullo schermo è il modo in cui la maggior parte delle API hardware 3D sono impostate per funzionare (DirectX e OpenGL) . Se vuoi il tuo sistema, tieni presente questo dato che potrebbe essere necessaria una traduzione. (Qualcosa usato in modo improprio ma coerente può spesso funzionare come desiderato, quindi il 'può essere' :))
James

1
Tecnicamente OpenGL ha Z che esce dallo schermo per impostazione predefinita, quando includi la direzione, quindi anche se sia DirectX hanno Z parallelo alla direzione di visualizzazione, sono ancora incompatibili! Quando lavori con il 3D devi essere competente nel passare da un sistema di coordinate a un altro tramite rotazioni, traduzioni e ridimensionamento - in effetti, è così che i modelli finiscono nel mondo - quindi non ha molto senso attaccarsi troppo a qualsiasi nozione di un standard.
Kylotan,

Basta sottolineare poi quando si ha a che fare con milioni di triangoli, forse meno devi fare per combattere il sistema di coordiante dell'hardware forse meglio;) Alla fine della giornata, rendere i giochi è divertente nonostante i livelli di stress .. Fai quello che vuoi: )
James,

L'idea di "Z" come entrare / uscire dallo schermo o essere altitudine è alquanto fuorviante. Potrebbe essere più semplice concettualizzare le trasformazioni. Presentiamo le coordinate del vertice 3D / 4D che alla fine vengono trasformate in spazio finestra 2D ma con un valore di profondità. L'idea che un'API associ intrinsecamente le coordinate 3D di X, Y o Z alla "profondità" non è proprio corretta: puoi trovare qualsiasi trasformazione che scambia il significato delle coordinate. Alla fine di quella trasformazione, otterrai comunque le coordinate dello spazio finestra 2D e un valore di profondità.
Patrick B

1
Non sono del tutto sicuro di dove non siamo d'accordo su tutto il resto: ovviamente puoi usare qualsiasi spazio di coordinate desiderato finché puoi proiettare a x, y, profondità alla fine, ma questa domanda riguarda principalmente il motivo per cui esistono alcune convenzioni per i sistemi di coordinate e le convenzioni sono inevitabilmente legate ai concetti del mondo reale.
Kylotan,

6

Immagina di guardare un pezzo di carta teso davanti a te con un diagramma su di esso, gli assi sono tipicamente etichettati X attraverso il fondo e Y in verticale; questo lascia Z come l'asse esterno lungo il terreno.

È semplicemente una convenzione, ma è molto utilizzato nella grafica in cui pensiamo a Z come alla profondità della scena.

In altri campi come CAD la tua versione sarebbe più comune.


4

L'idea è che gli assi xey rimangano uguali: y è "in alto" sullo schermo e x è di fronte.

z - la terza dimensione, si proietta nuovamente sullo schermo (ignorando qui i problemi della mano). In 3 dimensioni questo diventa un po 'strano, ma per posizionare le cose nello spazio dello schermo ha più senso.

3) Puoi, se vuoi, ma sarebbe doloroso e goffo. Vorrei solo consigliarmi di abituarmi ai progetti Z dentro / fuori dal monitor.


1

1) Sì, le tue osservazioni sono corrette.

2) Il sistema di coordinate XYZ globale standard ha senso quando si pensa in termini di uno sparatutto in prima persona, quando si guarda attraverso gli occhi di un personaggio nella scena con una matrice di trasformazione vuota (identità). Come farebbe quando si disegna un sistema di coordinate su un pezzo di carta, X punta a destra e Y punta verso l'alto. Secondo la regola della mano destra (x-> pollice, y-> dito indice, z-> dito medio), Z punta verso di te.

3) Non sarebbe sbagliato, ma sarebbe un diversivo dagli standard. Ci sono tre problemi a cui riesco a pensare in questo momento: (a) Diciamo che un giorno vuoi usare una libreria di fisica che usa il frame di coordinate standard. Se non hai seguito lo standard, ora devi pensare alla trasformazione che ti porta dal tuo mondo al mondo della fisica. Può diventare fastidioso quando si desidera correggere un bug. (b) Quando si desidera condividere il codice con qualcuno o portare qualcuno per aiutare con lo sviluppo, devono abituarsi alla convenzione. (c) Quando si utilizzano modelli 3D standard, è sempre necessario avere una trasformazione al di sopra di essi per evitare che guardino lateralmente.

Ora per aggiungere alla domanda 2, è davvero utile pensare a X, Y e Z come non solo tre lettere, ma come giusto, su e indietro. Ogni personaggio nella scena ha un sistema di coordinate locale collegato a loro, e nei loro frame di coordinate locali X ha sempre ragione, Y è su e Z è indietro. Una volta che hai questo, ora puoi dare un senso ai vettori che stampi o scrivere i tuoi algoritmi in modo sensato. Supponiamo che tu abbia due personaggi A e B e che tu voglia fare qualcosa se uno di essi è rivolto verso l'altro. Puoi semplicemente trovare la posizione di B nel riquadro delle coordinate di A (Ta ^ -1 * p_b), guardare il vettore che ottieni e vedere se Z (indietro) è negativo e X (destra) e Y (su) sono piccoli, perché quel vettore ti dice quanto è indietro, a destra e in alto B rispetto ad A.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.