- Większość układów współrzędnych ekranu / mapy bitowej 2D ma dodatnią oś Y skierowaną w dół (z punktem początkowym w lewym górnym rogu).
- Jest to sprzeczne z tym, jak większość ludzi myśli geometrycznie z dodatnią osią Y skierowaną w górę (z punktem środkowym).
Jak większość gier zarządza dwoma różnymi układami współrzędnych 2D? Istnieją dwa główne typy współrzędnych (ekran vs. kartezjański), ale może istnieć wiele różnych przestrzeni współrzędnych: przestrzeń duszka, przestrzeń świata, przestrzeń widoku, przestrzeń ekranu itp.
Tło:
Pierwotnie dopasowałem współrzędne świata w mojej grze do konwencji współrzędnych ekranu 2D. Dzięki temu korzystanie z procedur rysowania grafiki było bardzo naturalne, ale podczas korzystania z funkcji trygonometrycznych, takich jak atan2 (), pojawiły się subtelne problemy. Wyniki podawania współrzędnych ekranu atan2 () 2D są bardzo mylące, ponieważ atan2 () zakłada dodatnie punkty osi y w górę.
Zmieniłem więc swoje współrzędne świata, aby podążać za klasycznym kartezjańskim układem współrzędnych (z początkiem w lewym dolnym rogu ekranu). Rozumowanie za pomocą atan2 () jest znacznie prostsze, ale teraz trudniej jest robić inne rodzaje rozumowania:
- Jeśli kliknę tutaj ekran, jaki duszek znajduje się pod nim?
- Gdzie kliknąłem tego duszka?
- Jeśli duszek zostanie narysowany w złym miejscu, co zostało niepoprawnie obliczone? Współrzędne ekranu czy współrzędne świata?
Zdaję sobie sprawę, że konwersja z ekranu na współrzędne kartezjańskie polega po prostu na skalowaniu wartości y o -1 z opcjonalnym tłumaczeniem obu wartości (x, y). Bardziej interesują mnie sprawdzone metody projektowania gier:
- Czy większość gier po prostu przestrzega konwencji współrzędnych ekranu i zmienia sposób myślenia o tym, jak powinny działać atan2 ()?
- Kiedy / jak przeprowadzane są konwersje układu współrzędnych? (Korzystanie z macierzy, abstrakcji OOP itp.)
- Czy lokalizacje duszka są przechowywane jako środek duszka lub jeden z rogów? Wysokość / szerokość duszka idąca w „złym” kierunku wydaje się być częstym problemem, gdy je narysuję.
Chociaż moje pytanie dotyczy głównie gier 2D, wydaje się, że OpenGL używa układu współrzędnych, w którym oś Y skierowana jest w górę. OpenGL musi ostatecznie rzutować te współrzędne 3D na układ współrzędnych ekranu 2D. Być może pewne wskazówki można znaleźć w metodzie OpenGL ...