我是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包含的头文件中,没有进行测试。
谢谢
答案 0 :(得分:0)
裁剪网格存在问题。裁剪无法正确完成。我增加了它的大小,现在它总是与音量相交。