【发布时间】:2014-06-28 01:17:57
【问题描述】:
在 CGAL 中有一个任意多面体(可以是凸面、凹面,甚至有孔),我如何对其面进行三角测量,以便创建 OpenGL 缓冲区进行渲染?
我已经看到 convex_hull_3() 返回一个具有三角面的多面体,但它不会为任意多面体做我想要的。
【问题讨论】:
标签: cgal
在 CGAL 中有一个任意多面体(可以是凸面、凹面,甚至有孔),我如何对其面进行三角测量,以便创建 OpenGL 缓冲区进行渲染?
我已经看到 convex_hull_3() 返回一个具有三角面的多面体,但它不会为任意多面体做我想要的。
【问题讨论】:
标签: cgal
头文件<CGAL/triangulate_polyhedron.h>包含一个未记录的函数
template <typename Polyhedron>
void triangulate_polyhedron(Polyhedron& p)
例如使用CGAL::Exact_predicates_inexact_constructions_kernel。
【讨论】:
多边形网格处理包为函数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
【讨论】: