挖掘立方体行进的多维数据集

我最初用完全的我的世界风格的结构构建了我的游戏世界的开始:块,只有可见的面呈现,噪声等。太块了。 我执行行军立方体。 看起来很好,可怕的工作:

问题是,当你尝试添加或删除块的行军立方体……正如他们应该…一切都变得平滑。 对邻居进行光线投射变得困难,如果你把他周围的所有方块都改变了, 明显。

我看到很多正在进行立方体/元球游戏,实现区域有机成型的游戏。 您不要放置“块”来塑造一个区域,或像Landmark采矿等那样去除它。

另一方面,Blockscape和Landmark似乎是两者的混合体? 土开始行进,但你可以从里面切出方块,把方块放在里面。

你怎么能用立方体做直角? 还是两个完全不同的系统的组合?

(更新):可能有不止一个答案,有没有人有任何经验试图做到这一点虽然? 我可以想到几个可能的方法:

  1. 单独的播放器将对象构建成单独的网格/对象,每个块将地形保持为地形。 运行平滑(行军立方体或其他)algorithm和正常计算只在地形上。 可能需要某种半透明的立方体荧光笔来显示光标当前select的内容。 我可以看到这个系统有很多好处,虽然觉得好像有一些缺点,我只是没有想到会立即出现,如果我开始编码…?

  2. 定义每个立方体的“平滑”布尔值,仅在初始计算任何表面(地板/天花板等)上的网格时分配。 在生成网格时,任何构建的/添加/移除的块都不会重新标记为“平滑”,而是使用不同的math表示平滑立方体而不是块状立方体。 这正是我目前正在使用的方法,它的工作原理还不到三分之一,就像一个完整的行进立方体方法一样。 基本上我是平均每个顶点的y值与周围的四个立方体的高度(噪声)值,而绝不会让它在0或以上1(留在立方体内)。 我还必须重新编写光线点击检测以使用曲面法线。

  3. 重新编写进行中的多维数据集algorithm,只在我希望他们/做我想要他们的单元上工作。 这似乎是最困难的,但可能是最有视觉回报的方法。

要么 ??

我建议使用Dual Contouring而不是Marching Cubes,原因如下:

  • 它支持平滑和尖锐的function
  • 它适用于细节级别的方法
  • 它不需要冗长的查找表

有一点需要注意的是,如果你对GPU有兴趣,那么GPU的并行化并不是那么简单。

PS:你可能会陷入困境,试图找出QEF求解器 – 所有的algorithm都是find平面距离平方和最小的点。 我发现了一个固定迭代次数的基于粒子的方法,可以在GPU内核/着色器中展开,效果很好。