用于网格到网格相交的c++库:可用的
C++ library for mesh to mesh intersection: what is available?
我需要计算三维三角形网格之间的体积相交和穿透深度(例如在。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
中的布尔运算速度比CGAL
和libigl
快,参见基于MeshLib
的MeshInspector应用视频
- 使用对象文件读取三角形数据网格
- 如何从 Skia 路径几何体中获取网格?
- CGAL:如何创建填充边界曲线的曲面网格?
- 检查 2D 网格的某个元素是否与另一个元素共享对角线、水平线或垂直线
- 创建具有两个视口的Qt3D C++场景,其中显示适当的不同网格
- 如何从 3D 曲面网格中删除自相交三角形?
- 在均匀网格中处理碰撞
- 更改高度贴图,使其在 4x4 网格上显示 16 个 hieghtmap
- 用于查找网格中最短路径的算法
- 循环通过网格获取温度,但不知道如何告诉程序停止循环
- 使用 glvertex4i 传递网格面索引时的顶点着色器错误
- 如何使用 sdl2 快速绘制像素网格?
- 如何使用条件计算 3D 网格中从一个点到另一个点的所有路径
- 使用 MFC 的表/网格
- 是否可以制作没有内部分割的cgal 3d多多马因网格?
- 获取网格中心的屏幕位置
- ASIMP 模型加载不会加载所有网格
- C++中的多维数据集:从 std::vector 的 2D 数据到 std::vector 的 2D 网格的最干净方法?
- 如何从C++而不是虚幻编辑器中添加静态网格体组件的值?
- 从 CGAL 3D 网格生成中获取顶点坐标的 -6.27744e+66:mesh_implicit_sphere示例