0

我正在尝试创建一个由体素(立方体)组成的 3D 世界。我正在努力使世界变得平滑,但我需要保持一些块“块状”。Marching Cubes 是一种非常流行的平滑世界的方法,但我看不到向它们添加“块状”立方体的非常好的方法。

由于我只使用 1 或 0 作为密度,有没有一种简单的方法来简化这个视频中的普通方块的世界,并保持像它们一样的“块状”立方体?

我知道许多其他允许清晰特征等的算法。但由于我只需要 1 次通过,网格不需要完全平滑,有没有比使用众多更复杂的算法之一更好的方法来平滑它?

编辑以清除我对平滑和“块状”立方体的含义:

我认为视频中显示的网格很平滑。“块状”立方体是指具有 90 度角的立方体。这些平滑的体素不是那么平滑,但对于我的目的来说已经足够了。

4

1 回答 1

0

假设 1) “平滑”和“方形”部分之间的区别将基于显示/游戏内材料类型。

假设 2)二进制密度的使用是由于实际上并未存储密度,而是存储(以某种可能的压缩方式)每个点的物质的身份或类型。

假设 3) 网格不需要是流形的。(允许自我交叉,但不应该有孔)。

结果:每种材料都有单独的网格通道。如果材料是“平滑型”,则在其上运行行进立方体。如果材料是“块状”类型,则在每个点周围放置六个四边形中的一些。

为了保持“实体”(表面的连续性,没有孔),平滑通道必须将任何实体视为占用空间,而块通道应该只忽略面是块(或连续光滑的材料,但这需要额外的8 分送入支票,这可能比推着一堆废内面更糟糕)。为避免重复,仅当 8 个点中的至少一个为“平滑型”时才绘制平滑表面,而如果中心点为“块型”,则绘制块通道。

据我所知,3 ^ 8 的问题源于单次通过在角落上的值。通过添加第二个通道(点在侧面和中心),除了行进立方体通道中已经存在的 2^8 之外,只需要计算 2^6 + 1 个案例。

于 2014-01-31T03:22:20.730 回答