diff --git a/tutorial/tutorial.html b/tutorial/tutorial.html index 900b8dc7f..9ae5490d9 100644 --- a/tutorial/tutorial.html +++ b/tutorial/tutorial.html @@ -35,15 +35,15 @@ lecture notes links to a cross-platform example application.

Table of contents

-
  • Chapter 5: Parametrization +
  • Chapter 5: Parametrization
  • -
  • Chapter 6: External libraries +
  • Chapter 6: External libraries
  • -
  • Chapter 7: Miscellaneous +
  • Chapter 7: Miscellaneous
  • Chapter 8: Outlook for continuing development
  • -

    Chapter 1

    +

    Chapter 1

    We introduce libigl with a series of self-contained examples. The purpose of each example is to showcase a feature of libigl while applying to a practical @@ -150,7 +150,7 @@ concepts of libigl and introduce a simple mesh viewer that allows to visualize a surface mesh and its attributes. All the tutorial examples are cross-platform and can be compiled on MacOSX, Linux and Windows.

    -

    libigl design principles

    +

    libigl design principles

    Before getting into the examples, we summarize the main design principles in libigl:

    @@ -209,7 +209,7 @@ inside each example folder.

    solver which has to be downloaded and compiled separately.

    -

    Mesh representation

    +

    Mesh representation

    libigl uses the Eigen library to encode vector and matrices. We suggest that you keep the @@ -262,7 +262,7 @@ Similarly, a mesh can be written in an OBJ file using:

    Example 101 contains a simple mesh converter from OFF to OBJ format.

    -

    Visualizing surfaces

    +

    Visualizing surfaces

    Libigl provides an glfw-based OpenGL 3.2 viewer to visualize surfaces, their properties and additional debugging informations.

    @@ -303,7 +303,7 @@ mesh." />
    (Example 102) loads and draws a mesh.
    -

    Interaction with keyboard and mouse

    +

    Interaction with keyboard and mouse

    Keyboard and mouse events triggers callbacks that can be registered in the viewer. The viewer supports the following callbacks:

    @@ -356,7 +356,7 @@ control the camera directly in your code.

    the viewer’s callbacks. See the Viewer_plugin for more details.

    -

    Scalar field visualization

    +

    Scalar field visualization

    Colors and normals can be associated to faces or vertices using the set_colors function:

    @@ -394,7 +394,7 @@ color field. types and can be easily reused for many different tasks. Not committing to heavy data structures types favors simplicity, ease of use and reusability.

    -

    Overlays

    +

    Overlays

    In addition to plotting the surface, the viewer supports the visualization of points, lines and text labels: these overlays can be very helful while developing geometric processing algorithms to plot debug informations.

    @@ -1676,7 +1676,7 @@ ARAP deformation on a detailed shape (left of middle), to ARAP with grouped rotation edge sets (right of middle), to the very fast subpsace method (right). -

    Chapter 5: Parametrization

    +

    Chapter 5: Parametrization

    In computer graphics, we denote as surface parametrization a map from the surface to \(\mathbf{R}^2\). It is usually encoded by a new set of 2D @@ -1702,7 +1702,7 @@ genus. They initially cut the mesh in multiple patches that can be separately pa

  • Global seamless parametrization: these are global parametrization algorithm that hides the seams, making the parametrization “continuous”, under specific assumptions that we will discuss later.

  • -

    Harmonic parametrization

    +

    Harmonic parametrization

    Harmonic parametrization [16] is a single patch, fixed boundary parametrization algorithm that computes the 2D coordinates of the flattened mesh as two @@ -1746,7 +1746,7 @@ texture" /> mesh with texture, (right) UV parametrization with texture -

    Least squares conformal maps

    +

    Least squares conformal maps

    Least squares conformal maps parametrization [17] minimizes the conformal (angular) distortion of the parametrization. Differently from @@ -1795,7 +1795,7 @@ with texture, (right) UV parametrization" />

    (Example 502) LSCM parametrization. (left) mesh with texture, (right) UV parametrization
    -

    As-rigid-as-possible parametrization

    +

    As-rigid-as-possible parametrization

    As-rigid-as-possible parametrization [19] is a powerful single-patch, non-linear algorithm to compute a parametrization that strives to preserve @@ -1821,7 +1821,7 @@ texture" /> (left) mesh with texture, (right) UV parametrization with texture -

    N-rotationally symmetric tangent fields

    +

    N-rotationally symmetric tangent fields

    The design of tangent fields is a basic tool used to design guidance fields for uniform quadrilateral and hexahedral remeshing. Libigl contains an @@ -1861,10 +1861,10 @@ N are of different types and they appear in different positions.

    504, where the degree of the field can be change pressing the number keys. igl::nrosy implements the algorithm proposed in [21]. N-RoSy fields can also be interpolated with the algorithm -proposed in [22], see Section 507 for more details +proposed in [22], see Section npolyvectorfields for more details (igl::n_polyvector).

    -

    Global, seamless integer-grid parametrization

    +

    Global, seamless integer-grid parametrization

    The previous parametrization methods were focusing on creating parametrizations of surface patches aimed at texture mapping or baking of other surface @@ -1962,7 +1962,7 @@ it contains many overlaps.

    libQEx (not included in libigl). The full pipeline is implemented in Example 505.

    -

    Anisotropic remeshing

    +

    Anisotropic remeshing

    Anisotropic and non-uniform quad remeshing is important to concentrate the elements in the regions with more details. It is possible to extend the MIQ @@ -2019,7 +2019,7 @@ generate the UV parametrization, but other algorithms could be applied: the only desiderata is that the generated quad mesh should be as isotropic as possible.

    -

    N-PolyVector fields

    +

    N-PolyVector fields

    N-RoSy vector fields can be further generalized to represent arbitrary vector-sets, with arbitrary angles between them and with arbitrary lengths @@ -2040,7 +2040,7 @@ PolyVector fields. If the constraints are taken from an N-RoSy field, igl::n_polyvector generates a field that is equivalent, after normalization, to a globally optimal direction field.

    -

    Conjugate vector fields

    +

    Conjugate vector fields

    Two tangent vectors lying on a face of a triangle mesh are conjugate if

    @@ -2065,7 +2065,7 @@ closest conjugate field (Example 508).
    A smooth 4-PolyVector field (left) is deformed to become a conjugate field (right).
    -

    Planarization

    +

    Planarization

    A quad mesh can be transformed in a planar quad mesh with Shape-Up [26], a local/global approach that uses the global step to enforce @@ -2082,12 +2082,12 @@ quads." /> igl::palanarize (right). The colors represent the planarity of the quads. -

    Chapter 6: External libraries

    +

    Chapter 6: External libraries

    An additional positive side effect of using matrices as basic types is that it is easy to exchange data between libigl and other softwares and libraries.

    -

    State serialization

    +

    State serialization

    Geometry processing applications often require a considerable amount of computational time and/or manual input. Serializing the state of the application is a simple strategy to greatly increase the development efficiency. It allows to quickly start debugging just @@ -2206,7 +2206,7 @@ common to have to do small changes to figures, and being able to serialize the entire state just before you take screenshots will save you many painful hours before a submission deadline.

    -

    Mixing Matlab code

    +

    Mixing Matlab code

    Libigl can be interfaced with Matlab to offload numerically heavy computation to a Matlab script. The major advantage of this approach is that you will be @@ -2330,7 +2330,7 @@ L = sparse(LIJV(:,1),LIJV(:,2),LIJV(:,3));

    which is easily copied and pasted into Matlab for debugging, etc.

    -

    Calling libigl functions from Matlab

    +

    Calling libigl functions from Matlab

    It is also possible to call libigl functions from matlab, compiling them as MEX functions. This can be used to offload to C++ code the computationally @@ -2341,7 +2341,7 @@ We plan to provide wrappers for all our functions in the future, if you are interested in this feature (or if you want to help implementing it) please let us know.

    -

    Triangulation of closed polygons

    +

    Triangulation of closed polygons

    The generation of high-quality triangle and tetrahedral meshes is a very common task in geometry processing. We provide wrappers in libigl to @@ -2365,7 +2365,7 @@ in its interior) is triangulated.

    Triangulation of the interior of a polygon.
    Triangulation of the interior of a polygon.
    -

    Tetrahedralization of closed surfaces

    +

    Tetrahedralization of closed surfaces

    Similarly, the interior of a closed manifold surface can be tetrahedralized using the function igl::tetrahedralize which wraps the Tetgen library (Example @@ -2378,7 +2378,7 @@ using the function igl::tetrahedralize which wraps the Tetgen libra Tetrahedralization of the interior of a surface mesh.

    Tetrahedralization of the interior of a surface mesh.
    -

    Baking ambient occlusion

    +

    Baking ambient occlusion

    Ambient occlusion is a rendering technique used to calculate the exposure of each point in a surface @@ -2414,7 +2414,7 @@ occlusion." />

    A mesh rendered without (left) and with (right) ambient occlusion.
    -

    Picking

    +

    Picking

    Picking vertices and faces using the mouse is very common in geometry processing applications. While this might seem a simple operation, its @@ -2448,7 +2448,7 @@ vertices are colored in red." />

    (Example 607) Picking via ray casting. The selected vertices are colored in red.
    -

    Locally Injective Maps

    +

    Locally Injective Maps

    Extreme deformations or parametrizations with high-distortion might flip elements. This is undesirable in many applications, and it is possible to @@ -2465,7 +2465,7 @@ editing plus the anti-flipping constraints (right)." />

    A mesh (left) deformed using Laplacian editing (middle) and with Laplacian editing plus the anti-flipping constraints (right).
    -

    Boolean operations on meshes

    +

    Boolean operations on meshes

    Constructive solid geometry (CSG) is a technique to define a complex surface as the result of a number of set operations on solid regions of space: union, @@ -2552,14 +2552,14 @@ together coincident vertices, maintaining original triangle orientations.

    cork, which is typically faster, but is not always robust.

    -

    Miscellaneous

    +

    Miscellaneous

    Libigl contains a wide variety of geometry processing tools and functions for dealing with meshes and the linear algebra related to them: far too many to discuss in this introductory tutorial. We’ve pulled out a couple of the interesting functions in this chapter to highlight.

    -

    Mesh Statistics

    +

    Mesh Statistics

    Libigl contains various mesh statistics, including face angles, face areas and the detection of singular vertices, which are vertices with more or less than 6 @@ -2594,10 +2594,10 @@ the angles are to 60 degrees the more stable will the optimization be. In this case, it is clear that the mesh is of bad quality and it will probably result in artifacts if used for solving PDEs.

    -

    Generalized Winding Number

    +

    Generalized Winding Number

    The problem of tetrahedralizing the interior of closed watertight surface mesh -is a difficult, but well-posed problem (see our Tetgen wrappers). But +is a difficult, but well-posed problem (see our Tetgen wrappers). But black-box tet-meshers like TetGen will refuse input triangle meshes with self-intersections, open boundaries, non-manifold edges from multiple connected components. @@ -2635,20 +2635,20 @@ oriented), then \(w(\mathbf{p})\) tends smoothly towar more inside (V,F), and toward 0 as \(\mathbf{p}\) is more outside.

    -Example 702_WindingNumber computes the
+<img src= -
    Example 702_WindingNumber computes the +
    Example generalizedwindingnumber_WindingNumber computes the generalized winding number function for a tetrahedral mesh inside a cat with holes and self intersections (gold). The silver mesh is surface of the extracted interior tets, and slices show the winding number function on all tets in the convex hull: blue (~0), green (~1), yellow (~2).
    -

    Mesh Decimation

    +

    Mesh Decimation

    The study of mesh simplification or decimation is nearly as old as meshes themselves. Given a high resolution mesh with too many triangles, find a “well