2d指向2.5d点

时间:2012-05-17 21:33:02

标签: android math 2d matrix-multiplication 2.5d

我做了一个让玩家在2d空间中移动的游戏。当前视图来自上方,直接向下看玩家。我想补充的是能够将视图从上面转换为2.5d视角。基本上我想采取顶视图并将其转变为视野。可以把它想象成从Frogger的视图到更加FPS风格的视图。

那么我如何获取X和Y坐标并将它们转换为伪3d点?我已经看到了一些关于如何将2d点变成3d点的例子,但我不知道如何将它应用于完全2d的东西。

任何人都有任何可以帮助我完成此任务的示例或代码吗?

3 个答案:

答案 0 :(得分:0)

您可以按对象设置项目的高度。像“地板高度为0;角色高度为1”等等。

这是你能得到的最简单的;对于更复杂的高度映射,我认为你别无选择,只能在屏幕上为每个项目设置3D模型。

答案 1 :(得分:0)

对于2.5d投影(也称为orthographic projection),最简单的方法是为第三维选择2d向量,并将其用作权重以将深度添加到宽度和高度:< / p>

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 )开始。在任何情况下,ab的绝对值都大于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深度处)的位置。出于这样的目的,您可能希望在屏幕空间中维护一个可以以这种方式单击的任何对象的边界框....

答案 2 :(得分:0)

您正在寻找的是从R ^ 2到R ^ 3的翻译。 您应该为空间中的每个点应用变换,将其视为向量

Matrix multiplication

(我建议制作一个界面)

现在我假设游戏中的每个对象都有某种(x,y)坐标。 你在R ^ 2工作,所以整个空间的基本向量是e1(0,1)和e2(1,0) 现在你想把它翻译成3d,记住这是线性的,你可以将它缩放为任何缩放器(数字)。

所以这是由

给出的

现在为了生成'z',你必须进行矩阵乘法。

在r ^ 3中e1将是(0,1,0)e2将是(1,0,0)而e3将是(0,0,1)

这会将您的观点设置为与我上面的答案类似的基础水平。

现在检查这个wolfram我完全设定了任意值

http://www.wolframalpha.com/input/?i=matrix&a=C.matrix-_Calculator.dflt-&a=FSelect_**MatricesOperations-.MatrixOperations-&a=*FP.MatricesOperations.matricesop-matrixmult&f4=%7B%7B79%2C4%7D%2C%7B8%2C8%7D%7D&f=MatricesOperations.theMatrix1%7B%7B79%2C4%7D%2C%7B8%2C8%7D%7D&f5=%7B%7B1%2C0%2C5%7D%2C%7B0%2C1%2C5%7D%7D&f=MatricesOperations.theMatrix2_%7B%7B1%2C0%2C5%7D%2C%7B0%2C1%2C5%7D%7D

矩阵乘法是一种简单的算法(在原始意义上),您可以在线找到它。

然后可以绘制从该函数返回的3d矢量。

来自维基百科的公式

CC WIKI

你同样不管蓝色部分。

表示x'(100,0)*(1,0,0)     y'(0,100)* v(0,1,0)

在谷歌轻松找到

google