- La maggior parte dei sistemi di coordinate 2D schermo / bitmap ha l'asse Y positivo rivolto verso il basso (con l'origine nell'angolo in alto a sinistra).
- Questo è in contrasto con il modo in cui la maggior parte delle persone pensa geometricamente con l'asse Y positivo rivolto verso l'alto (con l'origine al centro).
In che modo la maggior parte dei giochi gestisce i due diversi sistemi di coordinate 2D? Esistono due tipi principali di coordinate (schermo vs cartesiano), ma potrebbero esserci molti spazi di coordinate diversi: spazio sprite, spazio mondo, spazio vista, spazio schermo, ecc ...
Sfondo:
Inizialmente ho fatto in modo che le coordinate del mondo nel mio gioco corrispondessero alla convenzione delle coordinate dello schermo 2D. Ciò ha reso molto naturale l'utilizzo delle routine di disegno grafico, ma si sono verificati problemi sottili quando si utilizzano funzioni trigonometriche come atan2 (). I risultati dell'alimentazione delle coordinate dello schermo 2D atan2 () sono molto confusi perché atan2 () assume che l'asse y positivo sia rivolto verso l'alto.
Quindi ho cambiato le mie coordinate del mondo per seguire il classico sistema di coordinate cartesiane (con l'origine nella parte inferiore sinistra dello schermo). Il ragionamento con atan2 () è molto più diretto, ma ora è più difficile fare altri tipi di ragionamento:
- Se clicco sullo schermo qui, quale sprite è sotto?
- Dove ho cliccato su quello sprite?
- Se uno sprite viene disegnato nella posizione sbagliata, cosa è stato calcolato in modo errato? Le coordinate dello schermo o le coordinate del mondo?
Mi rendo conto che la conversione dallo schermo alle coordinate cartesiane implica semplicemente il ridimensionamento del valore y di -1 con una traduzione opzionale di entrambi i valori (x, y). Sono più interessato alle migliori pratiche per la progettazione di giochi:
- La maggior parte dei giochi si attiene semplicemente alla convenzione delle coordinate dello schermo e cambia il loro pensiero su come dovrebbero funzionare cose come atan2 ()?
- Quando / come vengono eseguite le conversioni del sistema di coordinate? (Uso di matrici, astrazione OOP, ecc.)
- Le posizioni degli sprite sono memorizzate come il centro dello sprite o uno degli angoli? L'altezza / larghezza dello sprite che va nella direzione "sbagliata" sembra essere un problema comune quando le disegno.
Sebbene la mia domanda riguardi principalmente i giochi 2D, sembra che OpenGL usi un sistema di coordinate in cui l'asse Y punta verso l'alto. OpenGL deve eventualmente proiettare quelle coordinate 3D su un sistema di coordinate dello schermo 2D. Forse alcune indicazioni potrebbero essere trovate nel metodo OpenGL ...