Я работаю с SMFL / C ++ для создания 2D-изометрического игрового движка, я получил это, когда я делаю изометрические вычисления:
Вот моя формула для расчета изометрических координат в моем 2D движке:
Для координат I-J у меня есть:
x = (I - J) * (tileWidth / 2);
y = (J + I) * (tileHeight / 2);
//Totally working with classics tiles
РЕДАКТИРОВАТЬ: моя проблема из-за формы моей плитки это куб, но я понятия не имею, как это исправить. Неужели мне действительно пришлось делать сложные математические вычисления для обработки 3D-объектов (я бы предпочел этого избежать), или я могу просто немного изменить формулу?
РЕДАКТИРОВАТЬ 2: Решение: int isoY = (x + y) * (height / 4);
Во-первых, если это 2D-движок, мне интересно, почему есть 3 измерения, почему и как вы используете z в своем движке.
Предполагая, что вы хотите иметь план плиток в изометрической проекции ((x, y) в пикселях) с учетом координат (I, J) в количестве плиток в ортографической проекции.
В этом случае ваша формула для х и у меня в порядке заданные tileWidth и tileHeight верны (т.е. значение в изометрической проекции). И вам не нужно использовать любой z.
С другой стороны, если ваша проблема состоит в том, чтобы получить (x, y) пиксельные координаты трехмерного объекта с заданными (x, y, z) декартовыми координатами, я предлагаю вам прочитать это: Вычисление пиксельных координат трехмерной точки
Если я ошибся, я отредактирую или удалю.
Других решений пока нет …