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)

это установит вашу точку зрения на уровень земли, аналогичный ответу выше меня.

Теперь проверьте этот вольфрам, я изложил совершенно произвольные значения

http://www.wolframalpha.com/input/?i=matrix&a=*C.matrix-_*Calculator.dflt-&a=FSelect_**MatricesOperations-.MatrixOperations-&a=*FP.MatricesOperations.matricesop-_matrixmult&f4=%7B%7B79,4%7D,%7B8,8%7D%7D&f=MatricesOperations.theMatrix1_%7B%7B79,4%7D,%7B8,8%7D%7D&f5=%7B%7B1,0,5%7D,%7B0,1,5%7D%7D&f=MatricesOperations.theMatrix2_%7B%7B1,0,5%7D,%7B0,1,5%7D%7D

Матричное умножение - это простой алгоритм (в оригинальном смысле), который вы можете найти в Интернете.

Затем можно нарисовать объект, который был возвращен из этой функции в качестве трехмерного вектора.

Формула из Википедии

CC WIKI

Вы делаете то же самое, игнорируя синюю часть.

для x'(100,0)*(1,0,0) y'(0,100) *v(0,1,0)

Легко найти в Google

Google

Другие вопросы по тегам