- Большинство систем координат 2D-экрана / растрового изображения имеют положительную ось Y, направленную вниз (с началом координат в верхнем левом углу).
- Это противоречит тому, как большинство людей думают геометрически с положительной осью Y, направленной вверх (с началом координат в центре).
Как большинство игр управляют двумя разными 2D системами координат? Существует два основных типа координат (экран против декартовых), но может быть много разных координатных пространств: пространство спрайтов, пространство мира, пространство просмотра, пространство экрана и т. Д.
Задний план:
Изначально я установил, что мировые координаты в моей игре соответствуют соглашению о координатах 2D-экрана. Это сделало очень естественным использование процедур рисования графики, но при использовании тригонометрических функций, таких как atan2 (), возникли тонкие проблемы. Результаты ввода координат экрана 2D atan2 () очень запутаны, потому что atan2 () предполагает, что положительная ось y направлена вверх.
Поэтому я изменил свои мировые координаты в соответствии с классической декартовой системой координат (с источником в левом нижнем углу экрана). Рассуждать с atan2 () гораздо проще, но теперь сложнее делать другие рассуждения:
- Если я нажму на экран здесь, какой спрайт внизу?
- Где я нажал на этот спрайт?
- Если спрайт нарисован не в том месте, что было вычислено неправильно? Координаты экрана или мировые координаты?
Я понимаю, что преобразование из экранных в декартовые координаты включает в себя просто масштабирование значения y на -1 с необязательным переводом обоих значений (x, y). Меня больше интересуют лучшие практики для игрового дизайна:
- Разве большинство игр просто придерживаются соглашения о координатах экрана и изменяют свое мнение о том, как должны работать такие вещи, как atan2 ()?
- Когда и как выполняются преобразования системы координат? (С использованием матриц, абстракций ООП и т. Д.)
- Сохраняются ли местоположения спрайтов как центр спрайта или один из углов? Высота / ширина спрайта в «неправильном» направлении, кажется, является общей проблемой, когда я рисую их.
Хотя мой вопрос в основном касается 2D-игр, кажется, что OpenGL использует систему координат, где ось Y направлена вверх. OpenGL должен в конечном итоге проецировать эти трехмерные координаты в 2D-систему координат экрана. Возможно, какое-то руководство можно найти в методе OpenGL ...