java - 如何优化我的自定义 map 格式 (Java)

标签 java file optimization terrain heightmap

我正在创建一个 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/

相关文章:

java - 在 Java 中实现 "timers"的正确方法?

macos - 批量删除文件扩展名 OSX

java - 静态最终场,静态场和表演

optimization - 脚本/样式表 : Consolidate locally or use CDN?

java - Jenetics 中非原始类型的多目标问题

java - 如何在 Java 中创建未初始化的静态最终变量

java - 了解链表 (Java)

java - 在Java中使用 "DynaArray<int>"时出现语法错误?

c# - Azure 文件存储中的 System.IO 命名空间

git - 是否可以(在 git 中)保留上次更改文件时的信息?