各种游戏地图格式(室内和室外)

时间:2009-10-02 13:40:10

标签: 3d

我正在设计一个RPG,我遇到了一个小问题。我不确定在我的世界地图中使用什么。我在过去一周看过不同的格式,并确定没有任何适合户外环境的地图(我能找到......)。我发现.bsp地图(地震4或厄运3)对室内环境有好处,但对于户外设置不太好,因为它们已经完成了。

我正在努力寻找能够制作巨大户外地图的东西,就像遗忘或明天一样。当然,我可能不会将地图用于那种极端,如果我需要的话,可以有扩展空间。

谢谢, 罗比

4 个答案:

答案 0 :(得分:6)

室外环境通常使用地形高度贴图完成。它基本上是一个巨大的网格,每个单元格都有高度信息。此外,每个单元格都包含有关要使用的纹理的信息。

您可以使用基于分形和基于perlin噪声的地形生成器创建这些地图

答案 1 :(得分:3)

This article介绍了使用quadtrees进行地形存储,我认为这是常用的。基本上,它们就像Quake中使用的BSP树,但更适合存储高度图。

答案 2 :(得分:2)

我认为他正在寻找一种从文件中保存和加载地图的方法,而不是将它们存储在内存中的方法。 (或许我误解了?)

恕我直言,有四条路可以解决这个问题。


极值:创建自己的格式

您可以创建自己的文件格式。最简单的方法是选择一种广泛使用和可扩展的文件格式(例如XML),因为你会在互联网上免费获得大量的解析器。 (前往applied-mathematics.net获取简单但完整的XML解析器)。

这里的问题是你必须创建自己的地图编辑器。 毫无疑问,如果您想要学习大量的东西并且格式干净,这是“最好的”方式。但是你还必须考虑创建所有这些工具所需的时间。

极值:使用其他游戏/工具的格式

您还可以选择使用现有游戏的文件格式,并对其进行复古工程(或简单地使用Quake等开源游戏的格式)。

这里的问题是你将继承你选择的格式的限制。 但是开发时间大大减少了,你只需要找到一种方法来加载这些格式。

权衡1:从元数据中去耦几何

您还可以选择从现有格式中选择所需内容,并将元数据存储在其他位置。

例如,您可以使用创建如下的格式:

<?xml version="1.0" encoding="UTF-8"?>
<map>
  <name>MyMap</map>
  <geometry type="bsp">my_map.bsp</geometry>
  <spawn id="1">
    <monster type="1" spread="5" />
  </spawn>
</map>

在这里,您将获得两个世界中最好的一面。 您可以在任何.bsp编辑器(3DSmax,Blender)中设计地图,并将您需要的数据存储在XML中。

中间2:根据您的需求调整其他格式

这里的想法只是创建自己的统一格式,并为广泛使用的编辑器创建导出器。例如,您可以为Blender编写导出器脚本,这将为您自己的格式生成文件。


如果我误解并且您正在寻找地图的内存存储,那么还有一些提示。 (如果只是问,我会完成我的答案:))

  • 寻找Quad / Octrees。这是一种将地图切割成四边形/立方体的方法。然后你就可以在这些结构中实现快速搜索,因此只显示地图的可视部分,LOD等。
  • 通过选择接近地图内存布局的文件格式来加快地图加载。
  • 结合多个地图存储范例。高度图对于大型户外地图很有用,但是非常有限(特别是对于多级地图)。您可以使用高度贴图作为地板,并且存储岩石/鲜花是四叉树等。

答案 3 :(得分:1)

有很多方法可以实现游戏世界地图 无论如何,对于巨大的地图,请查看Spatial indexes,特别是Quadtrees.