首页 > 解决方案 > 具有任意曲面的 CGAL 切割立方体

问题描述

我是 CGAL 的新手,我正在尝试在 3d 中切割具有任意表面网格的立方体(没有自相交,没有闭合/没有体积)。目标是获得一个由切割立方体的一个“侧面”组成的体积,由立方体内部的表面部分封闭。

表面本身由无序三角形组成,这些三角形应该具有相同的缠绕顺序(一致的法线方向)但没有邻域信息,并且对于不同的三角形可以多次包含相同的点。

我尝试使用剪辑功能,例如:

    CGAL::Polygon_mesh_processing::clip(cube,surface,true);

这当然不起作用,因为表面没有关闭(据我所知)。但它显示了操作应该如何工作的想法。

布尔运算 ( https://doc.cgal.org/latest/Polygon_mesh_processing/index.html#title14)也不能用于此,因为它们是根据体积计算的并且表面没有体积。

我还考虑过扩展表面的外部以使其闭合。然而,这似乎不是一个好方法。

可悲的是,我对类似问题的研究没有成功。

我很确定在 CGAL 中有一个很好的方法可以做到这一点。也许在 CGAL 方面有更多经验的人知道如何做到这一点。

获得此卷的最佳方法是什么?

问候

编辑:

通过删除我的表面网格中的冗余点,我能够让剪辑工作。尽管如此,我并不总是得到音量的右侧,即使缠绕顺序应该产生指向外部的法线。是否有必要在切割前计算法线并将它们作为曲面的额外参数(参见此处)传递,以便始终获得体积的相同“内侧”侧?

此外,剪辑功能似乎很慢。我必须对大量的立方体和不同的表面进行这种切割。我使用 CGAL 作为仅标头库,没有 GMP 和 MPFR,因为它使我的其他应用程序崩溃。使用这些库的加速有多大,是否有任何其他技巧可用于加速计算,例如使用并行化?

我看到CGAL使用的是英特尔的TBB。但是在裁剪算法 CGAL_LINKED_WITH_TBB 包含的头文件中没有经过测试。

谢谢

标签: meshvolumecgal

解决方案


这是剪裁网格的问题。剪辑无法正确完成。我增加了它的大小,现在它总是与体积相交。


推荐阅读