代码之家  ›  专栏  ›  技术社区  ›  S.EB

有没有用于修复非流形网格并将其转换成流形几何的C++库(Linux)?

  •  -1
  • S.EB  · 技术社区  · 4 年前

    PS,我已经通过填充孔来清理结果,但是似乎仍然有一些不平滑的部分和孔。

    谢谢

    0 回复  |  直到 4 年前
        1
  •  0
  •   Jing Zhao    4 年前

    如果有任何C++库可以用于将非流形几何转换成流形曲面?

    是的,有 CGAL ,的 几何测量 算法 L 图书馆。

    在CGAL中 polygon mesh 被认为具有2流形的拓扑。
    当多边形网格的面给定但连通性未知时,这组面称为 polygon soup . 也就是说,曲面的所有三角形都将分别处理。

    要将非流形曲面转换为流形,可以 第一 将数据加载到 多边形汤 .
    那么 将其转换为 多边形网格 使用函数 polygon_soup_to_polygon_mesh . 以下 code snippet CGAL给出了一个例子:

    typedef CGAL::Exact_predicates_inexact_constructions_kernel          K;
    typedef CGAL::Polyhedron_3<K, CGAL::Polyhedron_items_with_id_3>      Polyhedron;
    
    std::ifstream input(filename);
    std::vector<K::Point_3> points;
    std::vector<std::vector<std::size_t> > polygons;
    if(!input || !CGAL::read_OFF(input, points, polygons) || points.empty())
    {
      std::cerr << "Cannot open file " << std::endl;
      return EXIT_FAILURE;
    }
    CGAL::Polygon_mesh_processing::orient_polygon_soup(points, polygons);
    Polyhedron mesh;
    CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh(points, polygons, mesh);
    

    或者可以尝试修复曲面网格,如中所示 here .