Чтобы вычислить 2D-координаты углов, просто выберите координаты в 3D и примените трехмерные уравнения перспективы:
Оригинальный уголок карты (x, y, z)
Применить вращение (умножением матрицы), которое вы получите (x ', y', z ')
Применение перспективной проекции (выберите точку начала камеры, направление и поле обзора)
Для самого простого случая это:
- x '' = x '/ z
- y '' = y '/ z
Теперь большая проблема - текстурирование, используемое для получения координат текстуры из пиксельных координат:
Правильный способ для вас - использовать гомографическое преобразование формы:
- U (x, y) = (ax + cy + e) / (gx + hy + 1)
- V (x, y) = (bx + dy + f) / (gx + hy + 1)
Факт, который является результатом соответствующих уравнений, примененных к плоскости.
a, b, c, d, e, f, g, h вычисляются таким образом, чтобы (с U, V в [0..1]):
- U (вверху, слева) = (0,0)
- U (сверху '', справа '') = (0,1)
- U (внизу '', слева '') = (1,0)
- U (внизу '', справа '') = (1,1)
Но ваша структура 2D-рендеринга, вероятно, использует вместо этого билинейную интерполяцию:
- U (x, y) = a + b * x + c * y + d * (x * y)
- V (x, y) = e + f * x + g * y + h * (x * y)
В этом случае вы получите плохо выглядящий результат.
И еще хуже, если визуализатор разбивает квад на два треугольника!
Так что я вижу только два варианта:
- использовать 3D рендерер
- вычислите текстуру самостоятельно, если вам нужно всего несколько изображений, а не анимация в реальном времени.