我需要计算三维三角网格之间的体积交点和穿透深度(例如.obj格式),但我对计算几何很新。
在上一篇文章(Mesh to mesh intersections)和谷歌搜索中,我找到了一些可能适合这项工作的C ++库:
尽管如此,我不确定哪一个最适合初学者。有什么建议吗?
答案 0 :(得分:8)
libigl在igl/boolean/mesh_boolean.h
中具有强大的网格布尔运算。这使用了使用CGAL的精确算术内核的实现或cork的包装(另一个选项)。
目前,libigl还在libigl/external/cork
中包含了一个修补后的软木版本,大大提高了健壮性。
在实现libigl的布尔操作时,我发现软木塞更快但并不总是产生正确的结果(具体来说,它无法解决所有交叉点)。
使用CGAL作为后端的Libigl与将网格转换为CGALNef_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);