1

我制作了一款游戏,可以让玩家在 2d 空间中四处走动。当前视图是从上方,直接向下看玩家。我想补充的是能够将视图从上方转换为 2.5d 透视图。基本上我想把俯视图变成地平线。可以把它想象成从 Frogger 中的视图转到更具 FPS 风格的视图。

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

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

4

3 回答 3

0

您可以按对象设置项目的高度。诸如“地板的高度为 0;角色的高度为 1”之类的东西。

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

于 2012-05-17T21:37:11.117 回答
0

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

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深度)上的位置。出于这样的目的,您可能希望在屏幕空间中为任何可以通过这种方式单击的对象维护一个边界框......

于 2012-05-17T21:45:13.923 回答
0

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

矩阵乘法

(我建议将其设为界面)

现在我假设你游戏中的每个对象都有某种 (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=矩阵操作.theMatrix1 %7B%7B79%2C4%7D%2C%7B8%2C8%7D%7D&f5=%7B%7B1%2C0%2C5%7D%2C %7B0%2C1%2C5%7D%7D&f=矩阵操作.theMatrix2_%7B%7B1%2C0%2C5%7D%2C%7B0%2C1%2C5%7D%7D

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

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

来自维基百科的公式

抄送维基

你做同样的事情,忽略蓝色部分。

对于 x'(100,0)*(1,0,0) y'(0,100) *v(0,1,0)

在谷歌上很容易找到

谷歌

于 2012-05-17T22:10:53.903 回答