2014-05-10 2 views
2

Avoir un polyèdre arbitraire dans CGAL (un qui peut être convexe, concave ou même avoir des trous) comment puis-je trianguler ses faces pour pouvoir créer des Buffers OpenGL pour le rendu?Triangulation des faces de polyèdres dans CGAL

J'ai vu le convex_hull_3() retourner un polyèdre qui a des faces triangulées, mais il ne fera pas ce que je veux pour les polyèdres arbitraires.

Répondre

3

Le fichier d'en-tête <CGAL/triangulate_polyhedron.h> contient une fonction non documentée

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

qui travaille avec CGAL::Exact_predicates_inexact_constructions_kernel par exemple.

+0

travail de mon projet avec le noyau Simple_cartesian . Est-ce que je peux utiliser cette fonction avec ce noyau? Désolé, je suis nouveau à CGAL ... – zync

+0

Vous pouvez essayer, mais il n'y a aucune garantie sur le résultat. Voir http://www.cgal.org/FAQ.html#inexact_NT. – sloriot

+0

Que puis-je faire pour convertir un polyèdre avec Simple_cartesian en un avec Exact_predicates_inexact_constructions_kernel? – zync

0

Le package Polygon Mesh Processing fournit la fonction CGAL::Polygon_mesh_processing::triangulate_faces avec plusieurs surcharges. La chose la plus simple à faire serait

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); 

Après cela, tous les visages en polyhedron sont des triangles.

La fonction modifie le modèle en place, il faut donc utiliser un HalfedgeDS prenant en charge la suppression. C'est la valeur par défaut, mais, par exemple, HalfedgeDS_vector ne le fera pas.

Voir aussi un exemple officiel qui utilise Surface_mesh au lieu de Polyhedron_3: Polygon_mesh_processing/triangulate_faces_example.cpp

Questions connexes