Dungeon Keeper 2 Style Map,Vertex Compression

时间:2012-07-02 16:26:59

标签: algorithm

所以正在开展一个小项目,但考虑使地图高效。我有一个数字网格说

100110
011011
010110

如果你曾经玩过地下城守护者,那么这个想法是0是一个扁平的挖出方形,1是一个静止的正方形。 我想利用网格布局,并能够最小化使用的顶点数量。因此,不要将个人立方体用于以下区域:

1111
1111
1111

我想用8。 对此最好的方法有什么想法吗?或者甚至只知道我应该使用的算法类型的名称。可以在飞行中快速做到的东西会更好,所以不要瓶颈渲染。

1 个答案:

答案 0 :(得分:2)

我同意这可能不是性能问题,但您可以使用(略微修改的)非平衡四叉树在压缩映射中表示您的地图。

  • 从地图开始,仅包含1个。您可以将其存储为树的根节点中大小为n * n的框。

  • 如果你想挖出其中一个框,你递归地走下树,使用默认的四叉树规则拆分n * n框(或者你在那里找到的任何东西)(=拆分n * n框分为四个n / 2 * n / 2盒等)。在某些时候,你会到达树的一个叶子,它只包含一个盒子(你要挖出的那个),你可以将它从1改为0。

  • 此外,在叶子更改并且您的递归调用返回后(=您将树向后移回根节点),您可以检查相邻的框是否可以合并它们。 (如果你有两个相邻的盒子都被挖出来,你可以合并它们。)

在索引像这样的低维数据时有时使用的另一种技术是空间填充曲线。具有良好平均位置且可逆的是希尔伯特曲线。基本上,您可以沿着空间填充曲线枚举您的盒子(挖出的盒子和填充的盒子),然后使用简单的游程长度压缩。

树形思想允许您减少渲染几何体的数量(您可以重新缩放纹理等,以通过一个更大的框来模拟n * n个框)。空间填充曲线可能只会为您节省一些内存。