我做了一个游戏,可以让玩家在2维空间中移动。当前视图是从上面开始的,直接向下看玩家。我想要添加的是将视图从上面转换到2.5d透视图的能力。基本上,我想要的是俯视图,并把它变成地平线。可以把它想象成从Frogger中的视图到更具FPS风格的视图。
那么,如何获取X和Y坐标并将其转换为伪3d点呢?我看过一些关于如何将2d点转换为3d点的例子,但我不知道如何将其应用于完全是2d的东西。
谁有任何示例或代码可以帮助我实现这一点?
发布于 2012-05-18 05:37:11
您可以按对象设置项目的高度。比如“地板的高度是0;字符的高度是1”等等。
这是你能得到的最简单的高度映射;对于更复杂的高度映射,我认为你别无选择,只能为屏幕上的每一项建立一个3D模型。
发布于 2012-05-18 05:45:14
对于2.5d投影(也称为orthographic projection),最简单的方法是为第三维选择一个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-18 06:10:54
您正在寻找的是从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-_%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矢量。
来自维基百科的公式

您可以忽略蓝色部分,执行相同的操作。
对于x'(100,0)*(1,0,0) y'(0,100) *v(0,1,0)
在google上很容易找到
https://stackoverflow.com/questions/10643849
复制相似问题