我正在研究基于我的世界的Java LWJGL游戏。我正在进行地形管理,这很难,因为世界可以随着你的探索而扩展。如果地形存储在块对象中并且您需要知道要从渲染列表中删除哪个块,要添加哪个块以及根据玩家的xyz位置生成哪个块,您将如何管理地形?
答案 0 :(得分:3)
我使用高分辨率医疗体素数据并使用八叉树以有效的方式存储它。
你不能真正使用八叉树,因为你想要动态扩展地形(八角树在查找时非常快,但在构建/扩展时非常慢)。
我建议你尝试使用HashMap,如果你为Vector3提供一个好的哈希函数,任何数量的块的查找时间几乎都是相同的(理论上是O(1),但那只是最好的情况...... )。
然后,您可以通过迭代地图键来删除所有看不见的地图条目。(这可以在处理所有加载/卸载的辅助线程上完成。)
希望这有帮助,
~Loki