added tips for windows build

updated tutorials
added Ultrecht
added Amir as contributor
This commit is contained in:
Daniele Panozzo
2016-10-06 15:21:51 -04:00
parent 7356f99ca3
commit 09b46b7330
4 changed files with 53 additions and 22 deletions
+41 -20
View File
@@ -115,6 +115,7 @@ lecture notes links to a cross-platform example application.</p>
<li><a href="#conjugatevectorfields">508 Conjugate vector fields</a></li>
<li><a href="#planarization">509 Planarization</a></li>
<li><a href="#integrable">510 Integrable PolyVector Fields</a></li>
<li><a href="#npolyvectorfields_general">511 General N-PolyVector Fields</a></li>
</ul></li>
<li><a href="#chapter6:externallibraries">Chapter 6: External libraries</a>
@@ -219,6 +220,9 @@ sudo apt-get install libxmu-dev
sudo apt-get install libblas-dev
</code></pre>
<p><em>Note for windows users</em>: libigl only supports the Microsoft Visual Studio 2015 compiler in 64bit mode. It will not work with a 32bit build and it will not work
with older versions of visual studio.</p>
<p>A few examples in Chapter 5 requires the <a href="http://www.graphics.rwth-aachen.de/software/comiso">CoMiSo
solver</a>. We provide a
mirror of CoMISo that works out of the box with libigl. To install it:</p>
@@ -2407,6 +2411,19 @@ of the parameterization functions (which are tangent vector fields on the surfac
<p>This method retains much of the core principles of the polyvector framework - it expresses the condition for zero discrete curl condition (which typically requires integers for the vector matchings) into a condition involving continuous variables only. This is done using coefficients of appropriately defined polynomials. The parameterizations generated by the resulting fields are exactly aligned to the field directions and contain no inverted triangles.</p>
<h2 id="npolyvectorfields_general"><a href="#npolyvectorfields_general">General N-PolyVector fields</a></h2>
<p>While mostly applicable for the design of symmetric fields (i.e. fields that comprise of vector sets with symmetries between them at each point, e.g. N-RoSy or frame-fields), the framework presented in <a class="citation" href="#fn:29" title="Jump to citation">[29]<span class="citekey" style="display:none">diamanti_2014</span></a> can be used to design completely general fields, with possibly no such symmetries. For example, one can design fields that at each point comprise of an arbitrary number of vectors, not required to be collinear - as opposed e.g. to the case of the 4 pairwise-collinear vectors designed in the example (<a href="507_PolyVectorField/main.cpp">Example 507</a>). This capability is implemented in the function igl::n_polyvector_general, and is illustrated in the example (<a href="511_PolyVectorFieldGeneral/main.cpp">Example 511</a>).</p>
<figure>
<img src="images/511_PolyVectorFieldGeneral.png" alt="Interpolation of a general field with 3 (left) and 9 vectors per point field from a sparse set of random constraints (in red). The field is defined on all mesh faces, but is only shown on a subset for clarity. " />
<figcaption>Interpolation of a general field with 3 (left) and 9 vectors per point field from a sparse set of random constraints (in red). The field is defined on all mesh faces, but is only shown on a subset for clarity. </figcaption>
</figure>
<p>The design of these general directional fields (also called vector-set fields) is based on the same polynomial framework and includes the symmetric fields as a special case. Note that in the case that some symmetries do exist in the constraints, the final field is not guaranteed to have these symmetries everywhere else on the mesh. For example, designing a field with 3 vectors per point where, at the constrained faces, two of the vectors are on a line opposite to each other, we are not guaranteed to always have two pairwise-collinear vectors everywhere in the result, as can be seen in the picture. In some cases however (as is the case of the frame field in the previous example <a href="507_PolyVectorField/main.cpp">Example 507</a>) these symmetries are in fact guaranteed due to the particular nature of the polynomial that applies in that case (two coefficients are 0).</p>
<p>For a complete categorization of fields used in various applications (including these general ones) see Vaxman et al. 2016 <a class="citation" href="#fn:33" title="Jump to citation">[33]<span class="citekey" style="display:none">vaxman_2016</span></a>.</p>
<h1 id="chapter6:externallibraries">Chapter 6: External libraries</h1>
<p>An additional positive side effect of using matrices as basic types is that it
@@ -2778,7 +2795,7 @@ elements. This is undesirable in many applications, and it is possible to
avoid it by introducing a non-linear constraints that guarantees that the area
of every element remain positive.</p>
<p>Libigl can be used to compute Locally Injective Maps <a class="citation" href="#fn:33" title="Jump to citation">[33]<span class="citekey" style="display:none">schuller_2013</span></a> using a variety of
<p>Libigl can be used to compute Locally Injective Maps <a class="citation" href="#fn:34" title="Jump to citation">[34]<span class="citekey" style="display:none">schuller_2013</span></a> using a variety of
deformation energies. A simple deformation of a 2D grid is computed in <a href="608_LIM/main.cpp">Example
608</a>.</p>
@@ -2832,7 +2849,7 @@ compute robustly with boundary representations, but are nonetheless useful.</p>
<p>To compute a boolean operation on a triangle mesh with vertices <code>VA</code> and
triangles <code>FA</code> and another mesh <code>VB</code> and <code>FB</code>, libigl first computes a unified
&#8220;mesh arrangement&#8221; (see <a class="citation" href="#fn:34" title="Jump to citation">[34]<span class="citekey" style="display:none">zhou_2016</span></a>) with vertices <code>V</code> and triangles <code>F</code> where all triangle-triangle
&#8220;mesh arrangement&#8221; (see <a class="citation" href="#fn:35" title="Jump to citation">[35]<span class="citekey" style="display:none">zhou_2016</span></a>) with vertices <code>V</code> and triangles <code>F</code> where all triangle-triangle
intersections have been &#8220;resolved&#8221;. That is, edges and vertices are added
exactly at the intersection lines, so the resulting <em>non-manifold</em> mesh <code>(V,F)</code>
has no self-intersections.</p>
@@ -2982,7 +2999,7 @@ mesh and which are outside. That is, which should be kept and which should be
removed.</p>
<p>The &#8220;Generalized Winding Number&#8221; is a robust method for determined
inside and outside for troublesome meshes <a class="citation" href="#fn:35" title="Jump to citation">[35]<span class="citekey" style="display:none">jacobson_2013</span></a>. The generalized
inside and outside for troublesome meshes <a class="citation" href="#fn:36" title="Jump to citation">[36]<span class="citekey" style="display:none">jacobson_2013</span></a>. The generalized
winding number with respect to <code>(V,F)</code> at some point <span class="math">\(\mathbf{p} \in
\mathcal{R}^3\)</span> is defined as scalar function:</p>
@@ -3025,7 +3042,7 @@ methods are fairly advanced.</p>
<p>One family of mesh decimation methods operates by successively remove elements
from the mesh. In particular, Hoppe advocates for successively remove or rather
collapsing edges <a class="citation" href="#fn:36" title="Jump to citation">[36]<span class="citekey" style="display:none">hoppe_1996</span></a>. The generic form of this technique is to
collapsing edges <a class="citation" href="#fn:37" title="Jump to citation">[37]<span class="citekey" style="display:none">hoppe_1996</span></a>. The generic form of this technique is to
construct a sequence of n meshes from the initial high-resolution mesh <span class="math">\(M_0\)</span> to
the lowest resolution mesh <span class="math">\(M_n\)</span> by collapsing a single edge:</p>
@@ -3226,8 +3243,8 @@ tree.squared_distance(V,F,P,sqrD,I,C);
<p>Finally, from the closest point or the winding number it&#8217;s possible to <em>sign</em>
this distance. In <code>igl::signed_distance</code> we provide two methods for signing:
the so-called &#8220;pseudo-normal test&#8221; <a class="citation" href="#fn:37" title="Jump to citation">[37]<span class="citekey" style="display:none">baerentzen_2005</span></a> and the generalized
winding number <a class="citation" href="#fn:35" title="Jump to citation">[35]<span class="citekey" style="display:none">jacobson_2013</span></a>.</p>
the so-called &#8220;pseudo-normal test&#8221; <a class="citation" href="#fn:38" title="Jump to citation">[38]<span class="citekey" style="display:none">baerentzen_2005</span></a> and the generalized
winding number <a class="citation" href="#fn:36" title="Jump to citation">[36]<span class="citekey" style="display:none">jacobson_2013</span></a>.</p>
<p>The pseudo-normal test (see also <code>igl::pseudonormal_test</code>) assumes the input
mesh is a watertight (closed, non-self-intersecting, manifold) mesh. Then given
@@ -3271,7 +3288,7 @@ iso-surface at value <span class="math">\(v\)</span> is composed of all points <
processing is to extract an iso-surface as a triangle mesh for further
mesh-based processing or visualization. This is referred to as iso-contouring.</p>
<p>&#8220;Marching Cubes&#8221; <a class="citation" href="#fn:38" title="Jump to citation">[38]<span class="citekey" style="display:none">lorensen_1987</span></a> is a <a href="https://en.wikipedia.org/wiki/Marching_cubes">famous
<p>&#8220;Marching Cubes&#8221; <a class="citation" href="#fn:39" title="Jump to citation">[39]<span class="citekey" style="display:none">lorensen_1987</span></a> is a <a href="https://en.wikipedia.org/wiki/Marching_cubes">famous
method</a> for iso-contouring
tri-linear functions <span class="math">\(f\)</span> on a regular lattice (aka grid). The core idea of this
method is to contour the iso-surface passing through each cell (if it does at
@@ -3322,7 +3339,7 @@ enforce a consistent facet orientation in the output faces <code>FF</code>.</p>
<p>For (closed or nearly closed) surfaces representing the boundary of a solid
object, libigl provides a routine to reorient faces so that the vertex ordering
corresponds to a counter-clockwise ordering of the vertices with a
right-hand-rule normal pointing outward. This method <a class="citation" href="#fn:39" title="Jump to citation">[39]<span class="citekey" style="display:none">takayama14</span></a> assumes
right-hand-rule normal pointing outward. This method <a class="citation" href="#fn:40" title="Jump to citation">[40]<span class="citekey" style="display:none">takayama14</span></a> assumes
that <a href="https://www.reddit.com/r/askscience/comments/32otgx/which_as_a_is_more_empty_an_atom_or_the_universe/">most of the universe is
empty</a>.
That is, most points in space are outside of the solid object than inside.
@@ -3383,11 +3400,11 @@ discretizing time at a finite step of steps <span class="math">\([0,\Delta t,2\D
and by 2) discretizing space with a regular grid and representing the distance
field using trilinear interpolation of grid values. Finally the output mesh,
<span class="math">\(\partial S\)</span> is approximated by contouring using Marching Cubes
<a class="citation" href="#fn:38" title="Jump to citation">[38]<span class="citekey" style="display:none">lorensen_1987</span></a>.</p>
<a class="citation" href="#fn:39" title="Jump to citation">[39]<span class="citekey" style="display:none">lorensen_1987</span></a>.</p>
<p>This method is similar to one described by Schroeder et al. in 1994
<a class="citation" href="#fn:40" title="Jump to citation">[40]<span class="citekey" style="display:none">schroeder_1994</span></a>, and the one used in conjunction with boolean operations by
Garg et al. 2016 <a class="citation" href="#fn:41" title="Jump to citation">[41]<span class="citekey" style="display:none">garg_2016</span></a>.</p>
<a class="citation" href="#fn:41" title="Jump to citation">[41]<span class="citekey" style="display:none">schroeder_1994</span></a>, and the one used in conjunction with boolean operations by
Garg et al. 2016 <a class="citation" href="#fn:42" title="Jump to citation">[42]<span class="citekey" style="display:none">garg_2016</span></a>.</p>
<p>In libigl, if your input solid&#8217;s surface is represented by <code>(V,F)</code> then the
output surface mesh will be <code>(SV,SF)</code> after calling:</p>
@@ -3667,53 +3684,57 @@ repository</a>.</p>
Sorkine-Hornung. <a href="http://igl.ethz.ch/projects/integrable/">Integrable PolyVector Fields</a>, 2015</p>
</li>
<li id="fn:33" class="citation"><span class="citekey" style="display:none">schuller_2013</span><p>Christian Schüller, Ladislav Kavan, Daniele Panozzo, Olga
<li id="fn:33" class="citation"><span class="citekey" style="display:none">vaxman_2016</span><p>Amir Vaxman, Marcel Campen, Olga Diamanti, Daniele Panozzo, David Bommes, Klaus Hildebrandt, Mirela Ben-Chen. <a href="https://www.google.com/search?q=Directional+Field+Synthesis+Design+and+Processing">Directional Field Synthesis, Design, and Processing</a>,
2016</p>
</li>
<li id="fn:34" class="citation"><span class="citekey" style="display:none">schuller_2013</span><p>Christian Schüller, Ladislav Kavan, Daniele Panozzo, Olga
Sorkine-Hornung. <a href="http://igl.ethz.ch/projects/LIM/">Locally Injective
Mappings</a>, 2013.</p>
</li>
<li id="fn:34" class="citation"><span class="citekey" style="display:none">zhou_2016</span><p>Qingnan Zhou, Eitan Grinspun, Denis Zorin. <a href="https://www.google.com/search?q=Mesh+Arrangements+for+Solid+Geometry">Mesh Arrangements for
<li id="fn:35" class="citation"><span class="citekey" style="display:none">zhou_2016</span><p>Qingnan Zhou, Eitan Grinspun, Denis Zorin. <a href="https://www.google.com/search?q=Mesh+Arrangements+for+Solid+Geometry">Mesh Arrangements for
Solid
Geometry</a>,
2016</p>
</li>
<li id="fn:35" class="citation"><span class="citekey" style="display:none">jacobson_2013</span><p>Alec Jacobson, Ladislav Kavan, and Olga Sorkine.
<li id="fn:36" class="citation"><span class="citekey" style="display:none">jacobson_2013</span><p>Alec Jacobson, Ladislav Kavan, and Olga Sorkine.
<a href="https://www.google.com/search?q=Robust+Inside-Outside+Segmentation+using+Generalized+Winding+Numbers">Robust Inside-Outside Segmentation using Generalized Winding
Numbers</a>,
2013.</p>
</li>
<li id="fn:36" class="citation"><span class="citekey" style="display:none">hoppe_1996</span><p>Hugues Hoppe. <a href="https://www.google.com/search?q=Progressive+meshes">Progressive
<li id="fn:37" class="citation"><span class="citekey" style="display:none">hoppe_1996</span><p>Hugues Hoppe. <a href="https://www.google.com/search?q=Progressive+meshes">Progressive
Meshes</a>, 1996</p>
</li>
<li id="fn:37" class="citation"><span class="citekey" style="display:none">baerentzen_2005</span><p>J Andreas Baerentzen and Henrik Aanaes.
<li id="fn:38" class="citation"><span class="citekey" style="display:none">baerentzen_2005</span><p>J Andreas Baerentzen and Henrik Aanaes.
<a href="https://www.google.com/search?q=Signed+distance+computation+using+the+angle+weighted+pseudonormal">Signed distance computation using the angle weighted
pseudonormal</a>,
2005.</p>
</li>
<li id="fn:38" class="citation"><span class="citekey" style="display:none">lorensen_1987</span><p>W.E. Lorensen and Harvey E. Cline. <a href="https://www.google.com/search?q=Marching+cubes:+A+high+resolution+3d+surface+construction+algorithm">Marching cubes: A high
<li id="fn:39" class="citation"><span class="citekey" style="display:none">lorensen_1987</span><p>W.E. Lorensen and Harvey E. Cline. <a href="https://www.google.com/search?q=Marching+cubes:+A+high+resolution+3d+surface+construction+algorithm">Marching cubes: A high
resolution 3d surface construction
algorithm</a>,
1987.</p>
</li>
<li id="fn:39" class="citation"><span class="citekey" style="display:none">takayama14</span><p>Kenshi Takayama, Alec Jacobson, Ladislav Kavan, Olga
<li id="fn:40" class="citation"><span class="citekey" style="display:none">takayama14</span><p>Kenshi Takayama, Alec Jacobson, Ladislav Kavan, Olga
Sorkine-Hornung. <a href="https://www.google.com/search?q=A+Simple+Method+for+Correcting+Facet+Orientations+in+Polygon+Meshes+Based+on+Ray+Casting">A Simple Method for Correcting Facet Orientations in
Polygon Meshes Based on Ray
Casting</a>,
2014.</p>
</li>
<li id="fn:40" class="citation"><span class="citekey" style="display:none">schroeder_1994</span><p>William J. Schroeder, William E. Lorensen, and Steve
<li id="fn:41" class="citation"><span class="citekey" style="display:none">schroeder_1994</span><p>William J. Schroeder, William E. Lorensen, and Steve
Linthicum. <a href="https://www.google.com/search?q=implicit+modeling+of+swept+surfaces+and+volumes">Implicit Modeling of Swept Surfaces and
Volumes</a>,
1994.</p>
</li>
<li id="fn:41" class="citation"><span class="citekey" style="display:none">garg_2016</span><p>Akash Garg, Alec Jacobson, Eitan Grinspun. <a href="https://www.google.com/search?q=Computational+Design+of+Reconfigurables">Computational Design
<li id="fn:42" class="citation"><span class="citekey" style="display:none">garg_2016</span><p>Akash Garg, Alec Jacobson, Eitan Grinspun. <a href="https://www.google.com/search?q=Computational+Design+of+Reconfigurables">Computational Design
of
Reconfigurables</a>,
2016</p>