- Bei den meisten 2D-Bildschirm- / Bitmap-Koordinatensystemen zeigt die positive Y-Achse nach unten (mit dem Ursprung in der oberen linken Ecke).
- Dies widerspricht dem Denken der meisten Menschen geometrisch mit der positiven Y-Achse nach oben (mit dem Ursprung in der Mitte).
Wie verwalten die meisten Spiele die beiden unterschiedlichen 2D-Koordinatensysteme? Es gibt zwei Haupttypen von Koordinaten (Bildschirm oder kartesisch), aber es kann viele verschiedene Koordinatenräume geben: Sprite-Raum, Weltraum, Sichtraum, Bildschirmraum usw.
Hintergrund:
Ursprünglich habe ich die Weltkoordinaten in meinem Spiel der 2D-Bildschirmkoordinatenkonvention angepasst. Dies machte es sehr natürlich, die Grafikzeichnungsroutinen zu verwenden, aber bei der Verwendung von trigonometrischen Funktionen wie atan2 () traten subtile Probleme auf. Die Ergebnisse der Eingabe von atan2 () 2D-Bildschirmkoordinaten sind sehr verwirrend, da atan2 () davon ausgeht, dass die positive y-Achse nach oben zeigt.
Also änderte ich meine Weltkoordinaten, um dem klassischen kartesischen Koordinatensystem zu folgen (mit dem Ursprung unten links auf dem Bildschirm). Das Argumentieren mit atan2 () ist viel einfacher, aber jetzt ist es schwieriger, andere Argumentationsarten zu verwenden:
- Wenn ich hier auf den Bildschirm klicke, welches Sprite befindet sich darunter?
- Wo habe ich auf dieses Sprite geklickt?
- Was wurde falsch berechnet, wenn ein Sprite an der falschen Stelle gezeichnet wurde? Die Bildschirmkoordinaten oder die Weltkoordinaten?
Ich erkenne, dass die Konvertierung von Bildschirmkoordinaten in kartesische Koordinaten das einfache Skalieren des y-Werts um -1 mit einer optionalen Übersetzung beider (x, y) -Werte umfasst. Ich bin mehr an Best Practices für das Game-Design interessiert:
- Halten sich die meisten Spiele nur an die Bildschirmkoordinatenkonvention und ändern ihre Überlegungen darüber, wie Dinge wie atan2 () funktionieren sollten?
- Wann und wie werden Koordinatensystemkonvertierungen durchgeführt? (Verwenden von Matrizen, OOP-Abstraktion usw.)
- Werden Sprite-Positionen als Zentrum des Sprites oder als eine der Ecken gespeichert? Die Höhe / Breite des Sprites in die "falsche" Richtung scheint ein häufiges Problem zu sein, wenn ich sie zeichne.
Obwohl meine Frage hauptsächlich 2D-Spiele betrifft, scheint OpenGL ein Koordinatensystem zu verwenden, bei dem die Y-Achse nach oben zeigt. OpenGL muss diese 3D-Koordinaten schließlich auf ein 2D-Bildschirmkoordinatensystem projizieren. Vielleicht kann man in der OpenGL-Methode eine Anleitung finden ...