CGAL切割具有任意表面的立方体

时间:2019-01-08 12:28:51

标签: mesh volume cgal

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

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

我尝试使用clip函数,例如:

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

这当然是行不通的,因为表面没有闭合(据我所知)。但它显示了有关操作方式的想法。

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

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

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

我很确定CGAL中有一种不错的方法。也许在CGAL方面有更多经验的人知道该怎么做。

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

致谢

编辑:

通过删除曲面网格中的多余点,我可以使剪辑工作。但是,即使卷绕顺序应产生指向外部的法线,我也不一定总是获得体积的右侧。 为了始终获得相同的体积“内”面,是否需要计算法线并将其作为曲面的额外参数(请参见here)传递?

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

我看到CGAL使用的是Intel的TBB。但是在裁剪算法CGAL_LINKED_WITH_TBB包含的头文件中,没有进行测试。

谢谢

1 个答案:

答案 0 :(得分:0)

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