2d точка до 2.5d Point
Я сделал игру, которая позволяет игроку перемещаться в двухмерном пространстве. Текущий вид сверху, смотрит прямо на игрока. Что я хотел бы добавить, так это возможность перевести вид сверху в перспективу 2.5d. В основном я хочу взять вид сверху и превратить его в горизонт. Думайте об этом как о переходе от представления в Frogger к представлению более FPS-стиля.
Итак, как мне взять координаты X и Y и преобразовать их в псевдо 3D точку? Я видел несколько примеров того, как превратить 2D-точку в 3D-точку, но я не знаю, как применить это к чему-то полностью 2D.
У кого-нибудь есть примеры или код, который может помочь мне в этом?
3 ответа
Для 2,5-мерной проекции (также известной как ортографическая проекция) самый простой способ - выбрать 2-мерный вектор для третьего измерения и использовать его в качестве весов для добавления глубины к ширине и высоте:
if third-dimension weighting parameters are: vec2d( a, b ),
then: vec3d( x, y, z ) --> vec2d( x + a*z, y + b*z )
Точный выбор ( a, b )
зависит от вас, но вы можете начать с ( 0.5, 0.5 )
, В любом случае, это не имеет смысла для абсолютного значения либо a
или же b
быть больше чем 1.0
,
Чтобы вернуться в другую сторону, от 2d к 3d, это обязательно неоднозначно, в зависимости от z
координата:
a given 2d point: vec2d( x, y )
can correspond to any 3d point of the form: vec3d( x - a*z, y - b*z, z )
Если ваш пользователь нажимает на определенный ( x, y )
местоположение на экране, это может соответствовать местоположению на нескольких разных объектах (на разных z
глубины). Для подобных целей вы можете захотеть сохранить ограничительную рамку в пространстве экрана для любых объектов, которые можно нажимать таким образом...
Вы можете установить высоту элемента по объекту. Что-то вроде "пол имеет высоту 0; персонаж имеет высоту 1" и так далее.
Это самое простое, что вы можете получить; для более сложных отображений высоты, я думаю, у вас нет выбора, но есть 3D-модель для каждого элемента на экране.
То, что вы ищете, это перевод с R^2 на R^3. Вы должны применить преобразование для каждой точки в пространстве, рассматривая ее как вектор
(Я бы предложил сделать этот интерфейс)
Теперь я предполагаю, что каждый объект в вашей игре имеет некоторую (x,y) пару координат. Вы работаете в R^2, поэтому основными векторами для всего пространства являются e1(0,1) и e2 (1,0), теперь вы хотите перевести это в 3d, помня, что это линейно, вы можете масштабировать его любым масштабирующим устройством (число).
Так что это дано
Теперь, чтобы сгенерировать "z", вам нужно будет выполнить матричное умножение.
В г ^ 3 е1 будет (0,1,0) е2 будет (1,0,0) и е3 будет (0,0,1)
это установит вашу точку зрения на уровень земли, аналогичный ответу выше меня.
Теперь проверьте этот вольфрам, я изложил совершенно произвольные значения
Матричное умножение - это простой алгоритм (в оригинальном смысле), который вы можете найти в Интернете.
Затем можно нарисовать объект, который был возвращен из этой функции в качестве трехмерного вектора.
Формула из Википедии
Вы делаете то же самое, игнорируя синюю часть.
для x'(100,0)*(1,0,0) y'(0,100) *v(0,1,0)
Легко найти в Google