\( \newcommand{\E}{\mathrm{E}} \) \( \newcommand{\A}{\mathrm{A}} \) \( \newcommand{\R}{\mathrm{R}} \) \( \newcommand{\N}{\mathrm{N}} \) \( \newcommand{\Q}{\mathrm{Q}} \) \( \newcommand{\Z}{\mathrm{Z}} \) \( \def\ccSum #1#2#3{ \sum_{#1}^{#2}{#3} } \def\ccProd #1#2#3{ \sum_{#1}^{#2}{#3} }\)
CGAL - Poisson Surface Reconstruction
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
Poisson Surface Reconstruction Reference

surface_reconstruction_points_detail.png
Pierre Alliez, Laurent Saboret, Gaël Guennebaud
This package implements a surface reconstruction method: Poisson Surface Reconstruction. It takes as input a set of points with oriented normals and computes an implicit function. The CGAL surface mesh generator can then be used to extract an iso-surface from this function.


Introduced in: CGAL 3.5
Depends on: CGAL and Solvers
BibTeX: cgal:asg-srps-17b
License: GPL
Windows Demo: Polyhedron demo
Common Demo Dlls: dlls

Classified Reference Pages

Classes

Classes

class  CGAL::Poisson_reconstruction_function< Gt >
 Implementation of the Poisson Surface Reconstruction method. More...
 

Functions

template<typename PointInputIterator , typename PointMap , typename NormalMap , typename PolygonMesh , typename Tag = CGAL::Manifold_with_boundary_tag>
bool CGAL::poisson_surface_reconstruction_delaunay (PointInputIterator begin, PointInputIterator end, PointMap point_map, NormalMap normal_map, PolygonMesh &output_mesh, double spacing, double sm_angle=20.0, double sm_radius=30.0, double sm_distance=0.375, Tag tag=Tag())
 Performs surface reconstruction as follows: More...
 

Function Documentation

template<typename PointInputIterator , typename PointMap , typename NormalMap , typename PolygonMesh , typename Tag = CGAL::Manifold_with_boundary_tag>
bool CGAL::poisson_surface_reconstruction_delaunay ( PointInputIterator  begin,
PointInputIterator  end,
PointMap  point_map,
NormalMap  normal_map,
PolygonMesh &  output_mesh,
double  spacing,
double  sm_angle = 20.0,
double  sm_radius = 30.0,
double  sm_distance = 0.375,
Tag  tag = Tag() 
)

Performs surface reconstruction as follows:

  • compute the Poisson implicit function, through a conjugate gradient solver, represented as a piecewise linear function stored on a 3D Delaunay mesh generated via Delaunay refinement
  • meshes the function with a user-defined precision using another round of Delaunay refinement: it contours the isosurface corresponding to the isovalue of the median of the function values at the input points
  • outputs the result in a polygon mesh

This function relies mainly on the size parameter spacing. A reasonable solution is to use the average spacing of the input point set (using compute_average_spacing() for example). Higher values increase the precision of the output mesh at the cost of higher computation time.

Parameters sm_angle, sm_radius and sm_distance work similarly to the parameters of SurfaceMeshFacetsCriteria_3. The latest two are defined with respect to spacing.

Template Parameters
PointInputIteratoris a model of InputIterator.
PointMapis a model of ReadablePropertyMap with value type Point_3<Kernel>.
NormalMapis a model of ReadablePropertyMap with value type Vector_3<Kernel>.
PolygonMesha model of MutableFaceGraph with an internal point property map.
Tagis a tag whose type affects the behavior of the meshing algorithm (see make_surface_mesh()).
Parameters
beginiterator on the first point of the sequence.
endpast the end iterator of the point sequence.
point_mapproperty map: value_type of InputIterator -> Point_3.
normal_mapproperty map: value_type of InputIterator -> Vector_3.
output_meshwhere the reconstruction is stored.
spacingsize parameter.
sm_anglebound for the minimum facet angle in degrees.
sm_radiusbound for the radius of the surface Delaunay balls (relatively to the average_spacing).
sm_distancebound for the center-center distances (relatively to the average_spacing).
tagsurface mesher tag.
Returns
true if reconstruction succeeded, false otherwise.

#include <CGAL/poisson_surface_reconstruction.h>

Examples:
Poisson_surface_reconstruction_3/poisson_reconstruction_function.cpp.