title: libigl Tutorial author: Alec Jacobson date: 17 June 2015 css: tutorial/style.css html header:
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 |
igl::min_quad_with_fixed
and igl::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$.IGL_HEADER_ONLY
macro to IGL_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 the
IGL_STATIC_LIBRARY
macro at compile time and link to the libigl*.a
libraries.build/
directory with Makefiles for the main library (Makefile
) and each
dependency (e.g. Makefile_mosek
for libiglmosek.a
)igl::polar_svd
now always returns a rotation in R
, never a reflection.
This mirrors the behavior of igl::polar_svd3x3
. Consequently the T
part may have negative skews.igl::grad
function, which computed the per-triangle gradient
of a per-vertex scalar function has been replaced. Now igl::grad
computes
the linear operator (previous computed using igl::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 become MASSMATRIX_TYPE_*
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.