如何使“掉落” 3D地形(例如动物横穿)成为现实?


15

Animal Crossing有一种独特的滚动世界地图的方式:当角色向下移动时,世界将在顶部滚动并翻滚,就像它被卡在纸板管上一样:

动物穿越的汽缸世界

该视频显示了它的运动方式。

如何产生这种效果?


1
对我来说,这看起来不像是一种效果,它看起来像是一个非常简单的3D世界,相机正在跟随。
詹姆斯

入侵游戏可能会产生碰撞故障,让您走进世界尽头的海洋。您可以看到,在世界边缘之外的空虚中,世界的某些部分被“弯曲”了。视频在这里
Anko 2015年

Answers:


6

玩了Deathspank之后,我进行了一些实验,效果类似。尽管我从来没有深入研究过它,以了解是否可以对其进行超级优化,但一种可能性是仅根据深度修改顶点着色器中的项目。将cos(depth)映射到Y轴修改的函数起作用。您可以对其进行调整,以使世界不仅在远处掉落,还可以在距离某个深度更近的地方掉落,从而使世界特别圆滑。您可以对X轴值执行相同的操作,以使其看起来更球形。我不确定这是否真的是这样的游戏。我的实验结果不尽人意,但我并没有过多地使用这些比率,因此它可能很简单,只需更改衰减率以使其更好。


+1,因为这是我要做的方式。但是,您可能需要澄清“深度”的含义。可能是距相机的距离或距角色的距离。我认为同时尝试两者都是不错的。
DaleyPaley 2013年

抱歉,我参加晚会很晚-就像晚了6年-但是在交流情况下,“深度”是根据与摄像头的距离来计算的...但是由于摄像头的位置是基于角色的位置,因此一切都是连接的。
lvictorino

5

好像只是在“平坦的世界”并映射到圆柱坐标。本质上将世界包裹在圆柱上。我在平坦的世界上做了类似的事情,但将其包裹在一个球体上:

在此处输入图片说明 在此处输入图片说明

我对球体所做的方式类似于对圆柱体的处理方式。选择适合您的世界的半径(圆柱坐标中的ρ或“ rho”)。对于每个顶点,获取世界的XZ坐标(假设Y为高度),然后使用XZ和半径加Y隐蔽到圆柱坐标。如果不添加Y,则会得到一个扁平圆柱。然后转换回笛卡尔坐标以绘制游戏。


3
还要提及的另一件事是,《动物穿越》中的世界Y尺寸比圆柱体的周长大得多(仅通过注视它即可,因为视线非常接近)。因此,世界地图的某些部分仅被裁剪到最靠近角色的区域,并且该裁剪区域被包裹在整个圆柱体上。这类似于将基于2D瓷砖的地图裁剪为仅可见部分。
ChrisC 2011年

优点。我想也可以通过按需加载/卸载世界来保持较小的内存占用。
MichaelHouse

5

您想从一个平面世界变成一个圆柱世界。

围绕x轴旋转(在齐次坐标中)如下所示:

     | 1   0   0   0 |
Rx = | 0  ca  -sa  0 |
     | 0  sa   ca  0 |
     | 0   0    0  1 |

哪里:

ca = cos(angle) and sa = sin(angle)

要计算角度,请查看图像。pi / 2抵消,您剩下:

angle = offset_from_character.z - radius

另外,查看图像。投影点的角度取决于距角色的水平距离,距球体的距离取决于垂直方向。

new_position = character_position - vec3(0,radius,0) + Rx * vec3(0,radius+_old_position.y,0)

确保剔除地平线上的东西,否则整个世界都会环绕。

免责声明:我还没有测试过,我也不是数学专家,但是答案是这样的。如果我错了,请有人纠正我。

球形世界

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.