Преобразование координат в изометрии

Рейтинг: 0Ответов: 0Опубликовано: 16.02.2023

Пытаюсь нарисовать изометрическую карту для игры. Имею следующие параметры:

  • Ширина ячейки
  • Высота ячейки
  • Количество ячеек по ширине
  • Количество ячеек по высоте

Карта хранится в двумерном массиве, ячейки обходятся вложенным циклом. На шаге цикла - индекс ячейки по x и по y. Если речь об обычной 2d-карте, то координата ячейки - это [x * cellWidth; y * cellHeight].

Планирую сделать функцию для перевода из экранных координат в изометрические. То есть, в цикле получаю те же [x * cellWidth; y * cellHeight], передаю их в функцию и получаю изометрические координаты с нужным смещением, чтобы ячейки перекрывали друг друга, как это бывает в изометрии. Эту же функцию планирую использовать для вывода обычных линий на экране. Например, чтобы вывести верхнюю границу карты, получаю 2 точки:

[0; 0]
[mapWidth * cellWidth; 0]

Передаю обе точки в функцию преобразования координат и затем по результирующим координатам рисую линию. И хотя в экранном пространстве это была горизонтальная линия, в финальном выводе линия будет наклонной.

Итак, вопроса всего два:

  1. Возможно ли обойтись одной функцией преобразования координат для вывода и ячеек с перекрытием, и обычных линий в изометрическом пространстве?

  2. Хватит ли имеющихся данных, чтобы написать такую функцию преобразования (размеры ячейки и количество ячеек по ширине и высоте)?

И если да, то подскажите формулу для преобразования координат.

Пример перекрытия ячеек

Ответы

Ответов пока нет.