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

时间:2014-07-11 09:45:40

标签: c++ collision-detection intersection mesh

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

在上一篇文章(Mesh to mesh intersections)和谷歌搜索中,我找到了一些可能适合这项工作的C ++库:

  • CGAL
  • PQP
  • libigl
  • SWIFT

尽管如此,我不确定哪一个最适合初学者。有什么建议吗?

1 个答案:

答案 0 :(得分:8)

从版本1.1开始,

libigligl/boolean/mesh_boolean.h中具有强大的网格布尔运算。这使用了使用CGAL的精确算术内核的实现或cork的包装(另一个选项)。

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

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

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

Libilel的界面对于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);