首先,如果我的问题不清楚,我会道歉。在过去的几周里,我一直在关于这个主题的谷歌搜索和书籍阅读没有透露我试图解决的问题的任何术语。我将尽我所能描述我的问题;如果有人知道正确的行话来帮助我更简洁地表达我的问题,请告诉我。
我正在研究使用体素来代表服务器托管的多人游戏的可破坏地形的较大(256x256x256体素)战场的可行性。任何游戏一次只能存在一个战场。然而,为了能够广播房间和改变他们的地形,我试图找到一种算法,可以将体素分组到尽可能少的矩形块。作为一个简单的例子,如果水平的下半部分完全填充了一种类型的体素而上半部分具有另一种类型的体素,则该水平应该被分成两个块,一个代表水平的下半部分,并且其他代表顶部。理想情况下,此算法应该能够实时运行,因此可以在每个帧的基础上考虑地形中的任何变形并向客户端广播。这应该使客户能够有效地渲染地形,而不必担心在客户端中复制地形破坏逻辑。
我没有在任何地方找到任何关于如何做到这一点的文章。我试过寻找有关体素引擎的文章;我认为分块不足以满足我的需求。我查看了有关数据挖掘的书籍和文章,但在不知道问题的正确术语的情况下,我无法有效地进行搜索。我甚至看过Joseph O'Rourke的计算几何在C:第二版,但它似乎没有任何帮助。
以下是我尝试过的方法以及我发现的问题。报告的块计数用于填充256 ^ 3空间,通过随机丢弃超过4,194,304个“EARTH”体素到尽可能接近底部,因为它们可以用于随机选择的(x,z)坐标。只计算“EARTH”块。
考虑到最大可接受的块数是每个(x,y)坐标一个块来表示单个列,只有贪婪的体积才能被认为是接近最优的结果。
我不知道如何在不使用永不停止的暴力方法的情况下计算最小块数,因此我不知道是否有可能比贪婪的卷方法做得更好。此外,我不知道如何更快地做到这一点。
任何人都可以给我一个算法来尝试或至少指出我正确的方向吗?我想停止探索这个方向,并想办法解决我的问题,如果不能做得更好的话。