0

我正在尝试实现行进立方体算法的 2D 版本(行进广场?),我遇到的主要障碍之一是性能问题(使用 WebGL 和 three.js)。我注意到质量(体素/正方形大小)和性能之间存在巨大的权衡,我认为造成这种情况的罪魁祸首是元球的中心(实心区域):

元球

显然我不关心元球内部的面,因为无论如何那是一个完全坚固的区域;但我不确定如何在不将内部区域与其他表面相同处理的情况下绕过内部区域。当我在混合物中添加更多元球时,问题会变得更糟。

我怎样才能解决这个问题,以保持良好的质量并能够以良好的帧速率渲染许多元球?

4

1 回答 1

4

如果您正在实施标准行进方块技术,那么表面内外的情况应该不是问题。事实上,它们是最便宜的,因为您不需要为它们进行任何计算。

如果您想减少不需要的区域(圆的中心区域)的多边形数量,您需要考虑使用自适应采样技术。在这种情况下,最合适的可能是四叉树(二维八叉树)。

减小单元大小时的速度问题总是存在,因为 Marching Cubes 是 O(n^3) 算法(非常慢),因此行进方块将是 O(n^2)(仍然非常慢)。没有办法解决这个问题。(如上所述,使用自适应采样数据结构会加快速度。)

在我看来,您可以在较低分辨率下提高质量。圆圈似乎混叠了很多(假设这不是因为它实际上是低屏幕分辨率)。我会再次检查你如何在正方形的边缘进行插值(我希望你不只是使用边缘的中心) - 使用更合适的插值会给你更好的近似值,并且你会在较低的分辨率下获得更好的结果。请参阅Paul Bourke 关于行进立方体的文章,如果您不这样做,请查看插值。

以下是 3d 等值面提取技术的一些参考资料(主要基于 MC),但在 2d 情况下,您可以从中受益:

(Kazdan 等人,2007 年)
(Manson 和 Shaefer,2010 年)
(Wilhelms 和 Gleder,1992 年)

PS:还可以查看他们的参考文献以获取更多类似的,也许是基础论文!

于 2014-07-08T14:47:32.413 回答