2014-05-10 27 views
2

在CGAL中有一個任意的多面體(一個可以是凸的,凹的或者甚至有孔的)我怎樣才能對它的面進行三角剖分,以便我可以創建OpenGL緩衝區進行渲染?CGAL中的三角形多面體的面孔

我已經看到了convex_hull_3()返回一個具有三角面的多面體,但它不會做我想要的任意多面體。

回答

3

頭文件<CGAL/triangulate_polyhedron.h>包含非記錄功能

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

其正在與CGAL::Exact_predicates_inexact_constructions_kernel例如。

+0

我的項目與Simple_cartesian 內核工作。有沒有一種方法可以在該內核中使用該功能?對不起,我是CGAL的新手...... – zync

+0

你可以試試,但結果不能保證。請參閱http://www.cgal.org/FAQ.html#inexact_NT。 – sloriot

+0

如何將Simple_cartesian的多面體轉換爲Exact_predicates_inexact_constructions_kernel的多面體? – zync

0

多邊形網格處理包提供了功能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