【问题标题】:Triangulating Polyhedron faces in CGAL在 CGAL 中对多面体面进行三角剖分
【发布时间】:2014-06-28 01:17:57
【问题描述】:

在 CGAL 中有一个任意多面体(可以是凸面、凹面,甚至有孔),我如何对其面进行三角测量,以便创建 OpenGL 缓冲区进行渲染?

我已经看到 convex_hull_3() 返回一个具有三角面的多面体,但它不会为任意多面体做我想要的。

【问题讨论】:

    标签: cgal


    【解决方案1】:

    头文件<CGAL/triangulate_polyhedron.h>包含一个未记录的函数

    template <typename Polyhedron>
    void triangulate_polyhedron(Polyhedron& p)
    

    例如使用CGAL::Exact_predicates_inexact_constructions_kernel

    【讨论】:

    • 我的项目正在使用 Simple_cartesian 内核。有没有办法可以在这个内核中使用该功能?抱歉,我是 CGAL 新手...
    • 您可以尝试,但不能保证结果。见cgal.org/FAQ.html#inexact_NT
    • 如何将具有 Simple_cartesian 的多面体转换为具有 Exact_predicates_inexact_constructions_kernel 的多面体?
    • 你只需要改变内核就可以了。
    • 仅供参考:此标头已从 CGAL 项目中删除。引入了一个新的三角测量包:doc.cgal.org/latest/Triangulation/index.html
    【解决方案2】:

    多边形网格处理包为函数CGAL::Polygon_mesh_processing::triangulate_faces提供了多个重载。最简单的做法是

    typedef CGAL::Simple_cartesian<float> Kernel;
    typedef CGAL::Polyhedron_3<Kernel> Polyhedron_3;
    
    Polyhedron_3 polyhedron = load_my_polyhedron();
    CGAL::Polygon_mesh_processing::triangulate_faces(polyhedron);
    

    之后,polyhedron 中的所有面都是三角形。

    该函数就地修改模型,因此必须使用支持删除的HalfedgeDS。这是默认设置,但例如 HalfedgeDS_vector 不会这样做。

    另请参见使用Surface_mesh 而不是Polyhedron_3 的官方示例: Polygon_mesh_processing/triangulate_faces_example.cpp

    【讨论】:

      猜你喜欢
      • 2017-06-23
      • 2014-07-12
      • 1970-01-01
      • 2015-07-23
      • 2012-09-06
      • 2016-09-12
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多