- La plupart des systèmes de coordonnées 2D écran / bitmap ont l'axe Y positif pointant vers le bas (avec l'origine dans le coin supérieur gauche).
- C'est contraire à la façon dont la plupart des gens pensent géométriquement avec l'axe Y positif pointant vers le haut (avec l'origine au centre).
Comment la plupart des jeux gèrent-ils les deux systèmes de coordonnées 2D différents? Il existe deux principaux types de coordonnées (écran vs cartésien), mais il peut y avoir de nombreux espaces de coordonnées différents: espace sprite, espace monde, espace vue, espace écran, etc ...
Contexte:
À l'origine, j'ai fait correspondre les coordonnées du monde dans mon jeu à la convention des coordonnées d'écran 2D. Cela rendait très naturel l'utilisation des routines de dessin graphique, mais des problèmes subtils se posaient lors de l'utilisation de fonctions trigonométriques comme atan2 (). Les résultats de l'alimentation des coordonnées d'écran 2D de atan2 () sont très déroutants car atan2 () suppose que l'axe y positif pointe vers le haut.
J'ai donc changé mes coordonnées universelles pour suivre le système de coordonnées cartésiennes classique (avec l'origine en bas à gauche de l'écran). Le raisonnement avec atan2 () est beaucoup plus simple, mais maintenant il est plus difficile de faire d'autres types de raisonnement:
- Si je clique sur l'écran ici, quel sprite est en dessous?
- Où ai-je cliqué sur ce sprite?
- Si un sprite est dessiné au mauvais endroit, qu'est-ce qui a été calculé incorrectement? Les coordonnées de l'écran ou les coordonnées du monde?
Je réalise que la conversion de l'écran en coordonnées cartésiennes implique simplement de mettre à l'échelle la valeur y de -1 avec une traduction facultative des deux valeurs (x, y). Je suis plus intéressé par les meilleures pratiques de conception de jeux:
- La plupart des jeux respectent-ils simplement la convention des coordonnées d'écran et changent-ils leur façon de penser comment des choses comme atan2 () devraient fonctionner?
- Quand / comment les conversions de système de coordonnées sont-elles effectuées? (Utilisation de matrices, abstraction OOP, etc.)
- Les emplacements des images-objets sont-ils stockés au centre de l'image-objet ou dans l'un des coins? La hauteur / largeur du sprite allant dans la «mauvaise» direction semble être un problème courant lorsque je les dessine.
Bien que ma question concerne principalement les jeux 2D, il semble qu'OpenGL utilise un système de coordonnées où l'axe Y pointe vers le haut. OpenGL doit éventuellement projeter ces coordonnées 3D sur un système de coordonnées d'écran 2D. Peut-être que quelques conseils pourraient être trouvés dans la méthode d'OpenGL ...