我正在创建一个 3D 游戏,其中有一个使用高度图的大型开放世界(200×200 公里)。我将高度图分成 200×200 = 40,000 个 1000×1000 米的区域,然后再将它们分成 20×20 = 400 个 50×50 米的 block 。高度图是从 PNG 文件生成的。
我正在考虑存储地形的方法。我已经尝试了一些东西,但它会为每个区域生成大约 16MB 的文件,这对于全世界(40,000 个区域)来说是 640GB。
区域文件的示例可以在这里找到: http://updo.nl/file/e10ce974.umap
我的问题:如何将如此多的信息紧凑地存储在区域文件中并在以后读取它们?
最佳答案
如果每个坐标的值通常不同并且不同的方式不可预测,则高度图是一种存储信息的有效方法。换句话说,高度图在处理随机数据时非常有效。如果您的数据存在某种模式,通常会有更好的解决方案。
考虑 y = x
描述的行.您可以使用分辨率为 1 的高度图来描述此坡度,类似于 [(1, 1), (2, 2), (3, 3), ...]
。如果您的高度图具有高分辨率,则该列表将非常大。或者,您可以将该斜率描述为穿过点 (1, 1) 和 (2, 2) 的线。在这种情况下,通过特定点/顶点定义线/体积更有效。
对于类似地形的数据,因为它通常是非随机的,我会通过 polygonal meshes 推荐第二种方法。 .您可能会找到类似 JMesh 的图书馆的用途。
如需进一步阅读,here在与该主题相关的游戏开发堆栈交换中是一个很好的答案(坦率地说,比我的好得多)。
关于java - 如何优化我的自定义 map 格式 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9054749/