title: libigl Tutorial author: Alec Jacobson date: 17 June 2015 css: tutorial/style.css html header: <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script src="http://yandex.st/highlightjs/7.3/highlight.min.js"></script> <script>hljs.initHighlightingOnLoad();</script>Version | Short description |
---|---|
1.2.1 | Reorganization opengl-dependent functions: opengl and opengl2 extras |
1.2.0 | Reorganization of "extras", rm deprecated funcs, absorb boost & svd3x3 |
1.1.7 | Switch build for static library to cmake. |
1.1.6 | Major boolean robustness fix, drop CGAL dependency for AABB/distances |
1.1.5 | Bug fix in booleans |
1.1.4 | Edge collapsing and linear program solving |
1.1.3 | Bug fixes in active set and boundary_conditions |
1.1.1 | PLY file format support |
1.1.0 | Mesh boolean operations using CGAL and cork, implementing [Attene 14] |
1.0.3 | Bone heat method |
1.0.2 | Bug fix in winding number code |
1.0.1 | Bug fixes and more CGAL support |
1.0.0 | Major beta release: many renames, tutorial, triangle, org. build |
0.4.6 | Generalized Winding Numbers |
0.4.5 | CGAL extra: mesh selfintersection |
0.4.4 | STL file format support |
0.4.3 | ARAP implementation |
0.4.1 | Migrated much of the FAST code including extra for Sifakis' 3x3 svd |
0.4.0 | Release under MPL2 license |
0.3.7 | Embree2.0 support |
0.3.6 | boost extra, patches, mosek 7 support, libiglbbw (mosek optional) |
0.3.5 | More examples, naive primitive sorting |
0.3.3 | Many more examples, ambient occlusion with Embree. |
0.3.1 | Linearly dependent constraints in min_quad_with_fixed, SparseQR buggy |
0.3.0 | Better active set method support |
0.2.3 | More explicits, active set method, opengl/anttweakbar guards |
0.2.2 | More explicit instanciations, faster sorts and uniques |
0.2.1 | Bug fixes in barycenter and doublearea found by Martin Bisson |
0.2.0 | XML serializer more stable and fixed bug in remove_duplicate_vertices |
0.1.8 | Embree and xml (windows only) extras |
0.1.5 | Compilation on windows, bug fix for compilation with cygwin |
0.1.1 | Alpha release with core functions, extras, examples |
This change introduces better organization of dependencies and removes some deprecated/repeated functions. The 3x3 svd code and dependent functions (including ARAP) were absorbed into the main library. Similarly, the boost dependency extra was absorbed.
The core functionality of libigl (still) just depends on stl, c++11 and Eigen.
There are additional optional dependencies (e.g. CGAL, embree, glfw, tetgen,
triangle). Libigl functions using these are located (still) in sub-folders of
the include directory (e.g. include/igl/cgal/
, include/igl/embree/
). Prior
to version 1.2 we included copies of the code for some of these dependencies in the
external/
directory. As of
version 1.2, these have been replaced with git sub-repos. If you have cloned
libigl before version 1.2 then you should issue
git submodule update --init --recursive
Old | New |
---|---|
igl::angles |
igl::internal_angles |
igl::get_modifiers |
[deleted] |
igl::nchoosek(offset,K,N,std::vector) |
igl::nchoosek(Eigen,K,Eigen) |
#include <igl/boost/components.h> |
#include <igl/components.h> |
#include <igl/boost/bfs_orient.h> |
#include <igl/bfs_orient.h> |
#include <igl/boost/orientable_patches.h> |
#include <igl/orientable_patches.h> |
#include <igl/svd3x3/arap.h> |
#include <igl/arap.h> |
#include <igl/svd3x3/arap_dof.h> |
#include <igl/arap_dof.h> |
#include <igl/svd3x3/fit_rotations.h> |
#include <igl/fit_rotations.h> |
#include <igl/svd3x3/polar_svd3x3.h> |
#include <igl/polar_svd3x3.h> |
#include <igl/svd3x3/svd3x3.h> |
#include <igl/svd3x3.h> |
#include <igl/svd3x3/svd3x3_avx.h> |
#include <igl/svd3x3_avx.h> |
#include <igl/svd3x3/svd3x3_sse.h> |
#include <igl/svd3x3_sse.h> |
Our beta release marks our confidence that this library can be used outside of casual experimenting. To maintain order, we have made a few changes which current users should read and adapt their code accordingly.
The following table lists functions which have changed name as of version 1.0.0:
Old | New |
---|---|
igl::add_barycenter |
igl::false_barycentric_subdivision |
igl::areamatrix |
igl::vector_area_matrix |
igl::barycentric2global |
igl::barycentric_to_global |
igl::boundary_faces |
igl::boundary_facets |
igl::boundary_vertices_sorted |
igl::boundary_loop |
igl::cotangent |
igl::cotmatrix_entries |
igl::edgetopology |
igl::edge_topology |
igl::gradMat |
igl::grad |
igl::is_manifold |
igl::is_edge_manifold |
igl::mexStream |
igl::MexStream |
igl::moveFV |
igl::average_onto_vertices |
igl::moveVF |
igl::average_onto_faces |
igl::plot_vector |
igl::print_vector |
igl::pos |
igl::HalfEdgeIterator |
igl::plane_project |
igl::project_isometrically_to_plane |
igl::project_points_mesh |
igl::line_mesh_intersection |
igl::read |
igl::read_triangle_mesh |
igl::removeDuplicates.cpp |
igl::remove_duplicates |
igl::removeUnreferenced |
igl::remove_unreferenced |
igl::tt |
igl::triangle_triangle_adjacency |
igl::vf |
igl::vertex_triangle_adjacency |
igl::write |
igl::write_triangle_mesh |
igl::manifold_patches |
igl::orientable_patches |
igl::selfintersect |
igl::remesh_self_intersections |
igl::project_mesh |
igl::line_mesh_intersection |
igl::triangulate |
igl::polygon_mesh_to_triangle_mesh |
igl::is_manifold |
igl::is_edge_manifold |
igl::triangle_wrapper |
igl::triangulate |
- To match interfaces provided by (all) other quadratic optimization
libraries,
igl::min_quad_with_fixed
andigl::active_set
now expect as input twice the quadratic coefficients matrix, i.e. the Hessian. For example,igl::min_quad_with_fixed(H,B,...)
minimizes$\frac{1}{2}x^T H x+x^T B$ . - We have inverted the
IGL_HEADER_ONLY
macro toIGL_STATIC_LIBRARY
. To compile using libigl as a header-only library, simply include headers and libigl in the header search path. To link to libigl, you must define theIGL_STATIC_LIBRARY
macro at compile time and link to thelibigl*.a
libraries. - Building libigl as a static library is now more organized. There is a
build/
directory with Makefiles for the main library (Makefile
) and each dependency (e.g.Makefile_mosek
forlibiglmosek.a
) -
igl::polar_svd
now always returns a rotation inR
, never a reflection. This mirrors the behavior ofigl::polar_svd3x3
. Consequently theT
part may have negative skews. - We have organized the static library build
- The previous
igl::grad
function, which computed the per-triangle gradient of a per-vertex scalar function has been replaced. Nowigl::grad
computes the linear operator (previous computed usingigl::gradMat
). The gradient values can still be recovered by multiplying the operator against the scalar field as a vector and reshaping to have gradients per row. -
MASSMATRIX_*
has becomeMASSMATRIX_TYPE_*
- The function
igl::project_normals
, which cast a line for each vertex of mesh A in the normal direction and found the closest intersection along these lines with mesh B, has been removed.