added tutorial entry for vector field tracing

This commit is contained in:
Daniele Panozzo
2016-08-12 12:38:11 -04:00
parent 5ba924281a
commit 6dea99fcc3
5 changed files with 38 additions and 12 deletions
+19 -4
View File
@@ -146,7 +146,8 @@ lecture notes links to a cross-platform example application.</p>
<li><a href="#marchingcubes">705 Marching Cubes</a></li>
<li><a href="#facetorientation">706 Facet Orientation</a></li>
<li><a href="#sweptvolume">707 Swept Volume</a></li>
<li><a href="#pickingverticesandfaces">708 Picking vertices and faces</a></li>
<li><a href="#pickingverticesandfaces">708 Picking Vertices and Faces</a></li>
<li><a href="#vectorfieldvisualizer">709 Vector Field Visualization</a></li>
</ul></li>
<li><a href="#future">Chapter 8: Outlook for continuing development</a></li>
</ul>
@@ -2057,7 +2058,7 @@ harmonic parametrization, it does not need to have a fixed boundary.</p>
<span class="math">\([\mathbf{u},\mathbf{v}]^t A [\mathbf{u},\mathbf{v}]\)</span> is equal to the <a href="http://en.wikipedia.org/wiki/Vector_area">vector
area</a> of the mesh.</p>
<p>Using libigl, this matrix energy can be written in a few lines of codes. The
<p>Using libigl, this matrix energy can be written in a few lines of code. The
cotangent matrix can be computed using <code>igl::cotmatrix</code>:</p>
<pre><code class="cpp">SparseMatrix&lt;double&gt; L;
@@ -2078,7 +2079,7 @@ igl::repdiag(L,2,L_flat);
igl::vector_area_matrix(F,A);
</code></pre>
<p>The final energy matrix is the sum of these two matrices. Note that in this
<p>The final energy matrix is <span class="math">\(L_{flat} - 2A\)</span>. Note that in this
case we do not need to fix the boundary. To remove the null space of the energy and make the minimum unique, it is sufficient to fix two arbitrary
vertices to two arbitrary positions. The full source code is provided in <a href="502_LSCMParam/main.cpp">Example 502</a>.</p>
@@ -3362,7 +3363,7 @@ undergoing a rigid motion with non-trivial rotation is <em><strong>not</strong><
exactly representably by triangle mesh: it will be a piecewise-ruled surface.</p>
<p>To see this, consider the surface swept by a single edge&#8217;s line segment as it
performs a screw motion. </p>
performs a screw motion.</p>
<p>This means that if we&#8217;d like to the surface of the swept volume of a triangle
mesh undergoing a rigid motion and we&#8217;d like the output to be another triangle
@@ -3442,6 +3443,20 @@ vertices are colored in red." />
vertices are colored in red.</figcaption>
</figure>
<h2 id="vectorfieldvisualizer"><a href="#vectorfieldvisualizer">Vector Field Visualization</a></h2>
<p>Vector fields on surfaces are commonly visualized by tracing <a href="https://en.wikipedia.org/wiki/Streamlines,_streaklines,_and_pathlines">streamlines</a>. Libigl
supports the seeding and tracing of streamlines, for both simple vector fields
and for N-rosy fields. The seeds for the streamlines are initialized using <code>streamlines_init</code>,
and the lines are traced using <code>streamlines_next</code>. Each call to <code>streamlines_next</code> extends
each line by one triangle, allowing interactive rendering of the traced lines, as demonstrated
in <a href="709_VectorFieldVisualizer/main.cpp">Example 709</a>.</p>
<figure>
<img src="images/streamlines.jpg" alt="(Example 709) Interactive streamlines tracing." />
<figcaption>(<a href="709_VectorFieldVisualizer/main.cpp">Example 709</a>) Interactive streamlines tracing.</figcaption>
</figure>
<h1 id="future">Outlook for continuing development</h1>
<p>Libigl is in active development, and we plan to focus on the following features