fixed broken links in the integrable polyvector tutorial

This commit is contained in:
Daniele Panozzo
2015-07-31 11:19:51 +02:00
parent 84da7b985a
commit 31836e5aba
2 changed files with 32 additions and 12 deletions
+28 -11
View File
@@ -114,6 +114,7 @@ lecture notes links to a cross-platform example application.</p>
<li><a href="#npolyvectorfields">507 N-PolyVector fields</a></li>
<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>
</ul></li>
<li><a href="#chapter6:externallibraries">Chapter 6: External libraries</a>
@@ -2366,6 +2367,18 @@ igl::palanarize (right). The colors represent the planarity of the
quads.</figcaption>
</figure>
<h2 id="integrable">Integrable PolyVector Fields</h2>
<p>Vector-field guided surface parameterization is based on the idea of designing the gradients
of the parameterization functions (which are tangent vector fields on the surface) instead of the functions themselves. Thus, vector-set fields (N-Rosy, frame fields, and polyvector fields) that are to be used for parameterization (and subsequent remeshing) need to be integrable: it must be possible to break them down into individual vector fields that are gradients of scalar functions. Fields obtained by most smoothness-based design methods (eg. <a class="citation" href="#fn:25" title="Jump to citation">[25]<span class="citekey" style="display:none">levy_2008</span></a>, <a class="citation" href="#fn:27" title="Jump to citation">[27]<span class="citekey" style="display:none">knoppel_2013</span></a>, <a class="citation" href="#fn:29" title="Jump to citation">[29]<span class="citekey" style="display:none">diamanti_2014</span></a>, <a class="citation" href="#fn:26" title="Jump to citation">[26]<span class="citekey" style="display:none">bommes_2009</span></a>, <a class="citation" href="#fn:28" title="Jump to citation">[28]<span class="citekey" style="display:none">panozzo_2014</span></a>) do not have this property. In <a class="citation" href="#fn:32" title="Jump to citation">[32]<span class="citekey" style="display:none">diamanti_2015</span></a>, a method for creating integrable polyvector fields was introduced. This method takes as input a given field and improves its integrability by removing the vector field curl, thus turning it into a gradient of a function (<a href="510_Integrable/main.cpp">Example 510</a>).</p>
<figure>
<img src="images/510_Integrable.png" alt="Integration error is removed from a frame field to produce a field aligned parameterization free of triangle flips." />
<figcaption>Integration error is removed from a frame field to produce a field aligned parameterization free of triangle flips.</figcaption>
</figure>
<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>
<h1 id="chapter6:externallibraries">Chapter 6: External libraries</h1>
<p>An additional positive side effect of using matrices as basic types is that it
@@ -2745,7 +2758,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:32" title="Jump to citation">[32]<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:33" title="Jump to citation">[33]<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>
@@ -2804,7 +2817,7 @@ intersections have been &#8220;resolved&#8221;. That is, edges and vertices are
exactly at the intersection lines, so the resulting <em>non-manifold</em> mesh <code>(V,F)</code>
has no self-intersections.</p>
<p>Then libigl <em>peels</em> the outer hull <a class="citation" href="#fn:33" title="Jump to citation">[33]<span class="citekey" style="display:none">attene_2014</span></a> off this mesh recursively,
<p>Then libigl <em>peels</em> the outer hull <a class="citation" href="#fn:34" title="Jump to citation">[34]<span class="citekey" style="display:none">attene_2014</span></a> off this mesh recursively,
keeping track of the iteration parity and orientation flips for each layer.
For any boolean operation, these two pieces of information determine for each
triangle (1) if it should be included in the output, and (2) if its orientation
@@ -2908,7 +2921,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:34" title="Jump to citation">[34]<span class="citekey" style="display:none">jacobson_2013</span></a>. The generalized
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
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>
@@ -2951,7 +2964,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:35" title="Jump to citation">[35]<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:36" title="Jump to citation">[36]<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>
@@ -3152,8 +3165,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:36" title="Jump to citation">[36]<span class="citekey" style="display:none">baerentzen_2005</span></a> and the generalized
winding number <a class="citation" href="#fn:34" title="Jump to citation">[34]<span class="citekey" style="display:none">jacobson_2013</span></a>.</p>
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>
<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
@@ -3393,28 +3406,32 @@ repository</a>.</p>
Projections</a>, 2012</p>
</li>
<li id="fn:32" class="citation"><span class="citekey" style="display:none">schuller_2013</span><p>Christian Schüller, Ladislav Kavan, Daniele Panozzo, Olga
<li id="fn:32" class="citation"><span class="citekey" style="display:none">diamanti_2015</span><p>Olga Diamanti, Amir Vaxman, Daniele Panozzo, Olga
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
Sorkine-Hornung. <a href="http://igl.ethz.ch/projects/LIM/">Locally Injective
Mappings</a>, 2013.</p>
</li>
<li id="fn:33" class="citation"><span class="citekey" style="display:none">attene_2014</span><p>Marco Attene.
<li id="fn:34" class="citation"><span class="citekey" style="display:none">attene_2014</span><p>Marco Attene.
<a href="https://www.google.com/search?q=Direct+repair+of+self-intersecting+meshes">Direct repair of self-intersecting
meshes</a>,
2014.</p>
</li>
<li id="fn:34" class="citation"><span class="citekey" style="display:none">jacobson_2013</span><p>Alec Jacobson, Ladislav Kavan, and Olga Sorkine.
<li id="fn:35" 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:35" 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: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
Meshes</a>, 1996</p>
</li>
<li id="fn:36" class="citation"><span class="citekey" style="display:none">baerentzen_2005</span><p>J Andreas Baerentzen and Henrik Aanaes.
<li id="fn:37" 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>