网格到网格交叉的C++库:可用的是什么?

Nic*_*Nic 5 c++ intersection mesh collision-detection

我需要计算三维三角网格之间的体积交点和穿透深度(例如.obj格式),但我对计算几何是个新手.

在上一篇文章(网格到网格交叉点)和我的谷歌搜索中,我找到了一些可能适合这项工作的C++库:

  • CGAL
  • 研究生预科课程
  • libigl
  • 迅速

虽然,我不确定哪一个最适合初学者.有什么建议吗?

Ale*_*son 8

从版本1.1开始,libigl具有强大的网格布尔运算igl/boolean/mesh_boolean.h.这使用了使用CGAL精确算术内核的实现或者软木包装器(另一个选项).

目前,libigl还包含一个补丁版的软木塞libigl/external/cork,极大地提高了稳健性.

在实现libigl的布尔运算时,我发现软木塞更快,但并不总能产生正确的结果(具体来说,它无法解决所有交叉点).

Libigl使用CGAL作为后端,与将网格转换为CGAL Nef_polyhedron,进行CSG操作并转换回网格相比,是最强大且仍然快速的.只有结果是多方面的,才能进行最后的转换.相反,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);
Run Code Online (Sandbox Code Playgroud)