mirror of https://github.com/CGAL/cgal
tiny fixes in user manual
This commit is contained in:
parent
decb99a624
commit
368be05c8a
|
|
@ -20,7 +20,7 @@ Isosurfacing with different isovalues for the tractor model (courtesy the GrabCA
|
||||||
Isosurfacing, also referred to as isosurface extraction, involves the generation of an approximate isosurface from a sampled 3D scalar field. The output isosurface may consist of a single or of multiple, disjoint connected components. Isosurfacing is commonly required for volume visualization or simulation of physical phenomena.
|
Isosurfacing, also referred to as isosurface extraction, involves the generation of an approximate isosurface from a sampled 3D scalar field. The output isosurface may consist of a single or of multiple, disjoint connected components. Isosurfacing is commonly required for volume visualization or simulation of physical phenomena.
|
||||||
|
|
||||||
This package provides several isosurfacing algorithms that compute a surface mesh approximating an isosurface of a 3D scalar field defined over an input 3D domain.
|
This package provides several isosurfacing algorithms that compute a surface mesh approximating an isosurface of a 3D scalar field defined over an input 3D domain.
|
||||||
An isosurface is defined as the points of constant value of this scalar field, i.e. a level set.
|
An isosurface is defined as the points of constant value of this scalar field, i.e., a level set.
|
||||||
Such a constant value, referred to as isovalue, is user-defined. For well-behaved scalar fields
|
Such a constant value, referred to as isovalue, is user-defined. For well-behaved scalar fields
|
||||||
(e.g., non-zero gradient), the above level set is a surface. Depending on the isosurfacing method and the input data structure, the output is either a triangle, a quadrangle or a polygon surface mesh represented as an indexed face set. Note that the output may be empty when the isosurface is absent from the sampled input scalar field.
|
(e.g., non-zero gradient), the above level set is a surface. Depending on the isosurfacing method and the input data structure, the output is either a triangle, a quadrangle or a polygon surface mesh represented as an indexed face set. Note that the output may be empty when the isosurface is absent from the sampled input scalar field.
|
||||||
|
|
||||||
|
|
@ -28,12 +28,12 @@ Such a constant value, referred to as isovalue, is user-defined. For well-behave
|
||||||
|
|
||||||
The scientific literature abounds with algorithms for extracting isosurfaces, each coming with different properties for the output and requirements for the input.
|
The scientific literature abounds with algorithms for extracting isosurfaces, each coming with different properties for the output and requirements for the input.
|
||||||
% add references to a recent survey or to a series of surveys
|
% add references to a recent survey or to a series of surveys
|
||||||
This package offers Marching Cubes, topologically correct Marching Cubes and Dual Contouring.
|
This package offers Marching Cubes, topologically correct Marching Cubes and %Dual Contouring.
|
||||||
|
|
||||||
\subsection subsecmc Marching Cubes (MC)
|
\subsection subsecmc Marching Cubes (MC)
|
||||||
MC runs over a 3D grid, i.e. a 3D domain partitioned into hexahedral cells, and processes all cells of the input 3D domain individually while sampling the input scalar field at the grid corners.
|
MC runs over a 3D grid, i.e., a 3D domain partitioned into hexahedral cells, and processes all cells of the input 3D domain individually while sampling the input scalar field at the grid corners.
|
||||||
Each cell corner is assigned a sign (+/-) to indicate whether its scalar field value is above or below the user-defined isovalue.
|
Each cell corner is assigned a sign (+/-) to indicate whether its scalar field value is above or below the user-defined isovalue.
|
||||||
MC creates a vertex for each grid edge with a sign change, i.e. where the edge intersects the isosurface.
|
MC creates a vertex for each grid edge with a sign change, i.e., where the edge intersects the isosurface.
|
||||||
More specifically, the vertex position is computed via linear interpolation of the scalar field values evaluated at the cell corners forming the edge. Depending on the configuration of signs at the cell corners, the resulting vertices are connected to form triangles within the cell. The figure below illustrates the configurations in 2D. There is no less than 33 cases in 3D (not shown).
|
More specifically, the vertex position is computed via linear interpolation of the scalar field values evaluated at the cell corners forming the edge. Depending on the configuration of signs at the cell corners, the resulting vertices are connected to form triangles within the cell. The figure below illustrates the configurations in 2D. There is no less than 33 cases in 3D (not shown).
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -97,7 +97,7 @@ Variants of DC differ in the way they compute vertex positions.
|
||||||
The vertex positioning is thus configurable with an optional parameter passed to the DC algorithm.
|
The vertex positioning is thus configurable with an optional parameter passed to the DC algorithm.
|
||||||
Some variants do not require the gradient and therefore run successfully even when the default null gradient is provided.
|
Some variants do not require the gradient and therefore run successfully even when the default null gradient is provided.
|
||||||
|
|
||||||
Dual Contouring can deal with any domain but guarantees neither a 2-manifold nor a watertight mesh.
|
%Dual Contouring can deal with any domain but guarantees neither a 2-manifold nor a watertight mesh.
|
||||||
It generates fewer faces than Marching Cubes, in general.
|
It generates fewer faces than Marching Cubes, in general.
|
||||||
Its advantage over MC is its ability to recover sharp creases and corners.
|
Its advantage over MC is its ability to recover sharp creases and corners.
|
||||||
% PA: add a figure.
|
% PA: add a figure.
|
||||||
|
|
@ -149,7 +149,7 @@ The `isovalue` scalar parameter denotes the value used for sampling the input sc
|
||||||
|
|
||||||
The output surface mesh is provided in the form of a indexed face set, which is stored into two containers of `points` and `polygons`.
|
The output surface mesh is provided in the form of a indexed face set, which is stored into two containers of `points` and `polygons`.
|
||||||
The vertex positions are stored as `Point_3` in `points`. Each face in `polygons` is a list of indices pointing into the `points` container.
|
The vertex positions are stored as `Point_3` in `points`. Each face in `polygons` is a list of indices pointing into the `points` container.
|
||||||
Depending on the algorithm, the indexed face set may store either a polygon soup (unorganized polygons with no relationship whatsoever, i.e. no connectivity between them) or a mesh with connectivity.
|
Depending on the algorithm, the indexed face set may store either a polygon soup (unorganized polygons with no relationship whatsoever, i.e., no connectivity between them) or a mesh with connectivity.
|
||||||
|
|
||||||
The isosurfacing algorithms can run either sequentially on one CPU core or in parallel on multicore architectures with shared memory.
|
The isosurfacing algorithms can run either sequentially on one CPU core or in parallel on multicore architectures with shared memory.
|
||||||
The template parameter `ConcurrencyTag` is used to specify how the algorithm is executed: either Sequential_tag or Parallel_tag.
|
The template parameter `ConcurrencyTag` is used to specify how the algorithm is executed: either Sequential_tag or Parallel_tag.
|
||||||
|
|
@ -188,7 +188,7 @@ Scalability of the Marching Cubes algorithm. We plot the algorithm efficiency (n
|
||||||
|
|
||||||
\section secmyexamples Examples
|
\section secmyexamples Examples
|
||||||
|
|
||||||
\subsection myExampleImplicit_domain Implicit sphere
|
\subsection myExampleImplicit_domain Implicit Sphere
|
||||||
|
|
||||||
The following example shows the usage of the Marching Cubes algorithm to extract an isosurface.
|
The following example shows the usage of the Marching Cubes algorithm to extract an isosurface.
|
||||||
The domain is an `Implicit_domain` that describes the unit sphere by the distance to its center (set to the origin) as an implicit field.
|
The domain is an `Implicit_domain` that describes the unit sphere by the distance to its center (set to the origin) as an implicit field.
|
||||||
|
|
@ -210,7 +210,7 @@ The following example shows how to load data from an `Image_3`.
|
||||||
\subsection myExampleMeshOffset Offset Mesh
|
\subsection myExampleMeshOffset Offset Mesh
|
||||||
|
|
||||||
The following example illustrates how to generates a mesh approximating a signed offset to an input closed surface mesh.
|
The following example illustrates how to generates a mesh approximating a signed offset to an input closed surface mesh.
|
||||||
The input mesh is stored into an `AABB_tree` data structure to provides fast distance queries. Via the `Side_of_triangle_mesh` functor, the sign of the distance field is made negative inside the mesh.
|
The input mesh is stored into an `AABB_tree` data structure to provide fast distance queries. Via the `Side_of_triangle_mesh` functor, the sign of the distance field is made negative inside the mesh.
|
||||||
|
|
||||||
\cgalExample{Isosurfacing_3/dual_contouring_mesh_offset.cpp}
|
\cgalExample{Isosurfacing_3/dual_contouring_mesh_offset.cpp}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue