- У більшості 2D-екранових / растрових систем координат позитивна вісь Y спрямована вниз (з початком у верхньому лівому куті).
- Це суперечить тому, як більшість людей думають геометрично з позитивною віссю Y вгору (з початком у центрі).
Як більшість ігор керують двома різними двовимірними системами координат? Є два основні типи координат (екран проти декартових), але може бути багато різних координатних просторів: спрайтовий простір, світовий простір, простір виду, простір екрану тощо ...
Фон:
Я спочатку зробив світові координати в своїй грі, що відповідає двовимірному екрану координат. Це зробило дуже природно використовувати графіки графіки малювання, але тонкі проблеми виникли при використанні тригонометричних функцій, таких як atan2 (). Результати подачі координат екрана 2D atan2 () дуже заплутані, оскільки atan2 () передбачає позитивну вісь y вгору.
Тому я змінив свої світові координати, щоб слідкувати за класичною декартовою системою координат (з початком у нижній лівій частині екрана). Міркування з atan2 () набагато простіше, але зараз важче робити інші типи міркувань:
- Якщо тут натиснути екран, який спрайт знаходиться під ним?
- Де я натиснув на цей спрайт?
- Якщо спрайт намальовано в неправильному місці, що було обчислено неправильно? Координати екрану чи координати світу?
Я усвідомлюю, що перетворення з екрана в декартові координати включає просто масштабування значення y на -1 з необов'язковим перекладом обох (x, y) значень. Мене більше цікавлять кращі практики дизайну ігор:
- Чи більшість ігор просто дотримуються домовленості про координати екрану і змінюють своє мислення про те, як повинні працювати такі речі, як atan2 ()?
- Коли / як проводяться перетворення системи координат? (Використання матриць, абстрагування OOP тощо)
- Чи зберігаються спрайтові місця як центр спрайта або один з кутів? Висота / ширина спрайта, що йде в неправильному напрямку, здається, є звичайною проблемою, коли я малюю їх.
Хоча моє запитання в основному стосується двомірних ігор, схоже, OpenGL використовує систему координат, де вісь Y спрямована вгору. Врешті-решт OpenGL повинен проеціювати ці 3D координати на систему координат 2D екрану. Можливо, деякі методи можна знайти в методі OpenGL ...