用于网格到网格相交的c++库:可用的

C++ library for mesh to mesh intersection: what is available?

本文关键字:网格 c++ 用于      更新时间:2023-10-16

我需要计算三维三角形网格之间的体积相交和穿透深度(例如在。obj格式),但我对计算几何相当陌生。

在上一篇文章(Mesh to Mesh交集)和我的谷歌搜索中,我发现了一些可能适合做这项工作的c++库:

  • CGAL
  • 药品资格预审规划
  • libigl
  • 迅速

虽然,我不确定哪一个可能是最适合初学者。任何建议吗?

libigl作为版本1.1具有健壮的网格布尔运算在igl/boolean/mesh_boolean.h。这使用使用CGAL的精确算术内核的实现或软木包装(您的另一种选择)。

目前,libigl还在libigl/external/cork中包含了一个补丁版本的cork,这大大提高了健壮性。

在实现libigl的布尔运算时,我发现cork更快,但并不总是产生正确的结果(具体来说,它不能解决所有的交集)。

与将网格转换为CGAL的Nef_polyhedron,进行CSG操作并转换回网格相比,使用CGAL作为后端的Libigl是最健壮的,并且仍然快速。只有当结果是流形时,才有可能进行最后的转换。相反,libigl只使用CGAL进行精确的三角形-三角形相交和2D网格划分。正确,非流形输出没有问题。

Libigl的界面非常简单,对于Eigen用户来说非常熟悉。例如,寻找顶点在VA行,三角形索引在FA行的实体网格与另一个网格(VB,FB)的交点,并将输出存储在新网格(VC,FC)中:

#include <igl/boolean/mesh_boolean.h>
...
igl::mesh_boolean(VA,FA,VB,FB,MESH_BOOLEAN_TYPE_UNION,VC,FC);

另一种可能性是使用开源c++库MeshLib。它可以读取和写入Wavefront格式的网格(.obj),并在网格上健壮地执行布尔运算(交集,联合,差分):相应功能的文档。

据我所知,MeshLib中的布尔运算速度比CGALlibigl快,参见基于MeshLib的MeshInspector应用视频