可变形的地形

我目前正在研究一个3D沙盒,想知道什么是存储世界地形的最好方法。 我正在考虑制作某种网格,就像从一个obj文件中得到的那样,将会定义整个世界。 我会为每种types的地形都有一个(石灰层覆盖一层泥土,石层可能有矿石的“隧道”,每一个都有自己的网格来定义它的形状)。 然后,我将根据他们在世界上的位置将这个网格的一部分传递给玩家。

我想让玩家在一个持久的世界中变形地形,挖洞和洞穴(就像你在行星探索者或太空工程师那里看到的那样),所以不需要在飞行中产生它。

我在网上看过很多关于等值面的post,甚至我search得很远,我找不到明确的定义,或者是否适用于我的情况。 我只是想知道如果将地形存储为网格将是最好的方法。 如果是这样,最好是基于一个严格的x,y,z整数,还是有可能将它作为浮点数存储以获得更多的多样性?

我打算使用行军立方体或双轮廓的光滑地形。 你能给我你的想法吗?

    我会随心所欲地说,你正在使用体素,因为你希望能够挖洞和隧道生活。 存储一个可以永远改变为.obj的世界并不是一个好主意。

    为了您的理智和客户的理智,您最好select不同的格式。

    第一步:将世界分成大块。 如果一个区域被损坏,你可以重新加载它的块,而不是整个地图。

    第二步:写入磁盘。

    我的建议是将体素本身的信息保存为纹理1D,2D或3D。 您可以减less颜色信息的位以减小尺寸。 但你可能不想摆脱这一切。 然后,您可以使用颜色参数来存储有关世界状态的信息。

    (Roy Gee Biv = RGB颜色)示例…对于2D纹理,Roy可以告诉你该位置的材质。 吉可以告诉你深度。 如果需要的话,Biv可以存储位域。

    对于一维,Roy可以告诉你深度,Gee可以告诉你深度,Biv可以告诉你X的位置,Alpha可以告诉你Y的位置。

    鉴于游戏是一个MMO,预计服务器将长时间运行。 只要效率很高,加载对象的速度有多快并不重要。

    当游戏保存时,它只是将每个块转储到磁盘上的某个纹理上作为备份。 当它需要恢复到备份时,它可以加载到纹理中。 所以在这个阶段,你正在重读立方体。

    如果有的话,你的世界已经能够平滑几何。 所以你不必担心它的几何状态。 游戏将在几秒钟内重建一遍。

    好处是你不必制作你自己的dang库或文件格式。 2D纹理也有无损压缩algorithm。

    缺点是你可能无法存储不仅仅是世界几何的信息。 这可能是一个非常大的骗局…可能是一个非常小的骗局。 但是……如果是这样,没有规则阻止你加载两个文件。 这可能是一个很好的function。