Merge branch 'libdirectional_migration'
# Conflicts: # include/igl/integrable_polyvector_fields.h # include/igl/polyvector_field_matchings.cpp # tutorial/507_PolyVectorField/CMakeLists.txt # tutorial/507_PolyVectorField/main.cpp # tutorial/508_ConjugateField/CMakeLists.txt # tutorial/508_ConjugateField/main.cpp # tutorial/510_Integrable/CMakeLists.txt # tutorial/510_Integrable/main.cpp # tutorial/511_PolyVectorFieldGeneral/CMakeLists.txt # tutorial/511_PolyVectorFieldGeneral/main.cpp # tutorial/709_VectorFieldVisualizer/CMakeLists.txt # tutorial/709_VectorFieldVisualizer/main.cpp # tutorial/tutorial.md
This commit is contained in:
+53
-200
@@ -111,11 +111,7 @@ transformations</a>
|
||||
<li><a href="#nrotationallysymmetrictangetfields">504 N-Rotationally symmetric tangent fields</a></li>
|
||||
<li><a href="#globalseamlessintegergridparametrization">505 Global, seamless integer-grid parametrization</a></li>
|
||||
<li><a href="#anisotropicremeshingusingframefields">506 Anisotropic remeshing using frame fields</a></li>
|
||||
<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>
|
||||
<li><a href="#npolyvectorfields_general">511 General N-PolyVector Fields</a></li>
|
||||
<li><a href="#planarization">507 Planarization</a></li>
|
||||
</ul></li>
|
||||
<li><a href="#chapter6:externallibraries">Chapter 6: External libraries</a>
|
||||
|
||||
@@ -125,8 +121,7 @@ transformations</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="#savingamatlabworkspace">Saving a Matlab workspace</a></li>
|
||||
<li><a href="#dumpingeigenmatricestocopyandpasteintomatlab">Dumping Eigen matrices to copy and paste into
|
||||
Matlab</a></li>
|
||||
<li><a href="#dumpingeigenmatricestocopyandpasteintomatlab">Dumping Eigen matrices to copy and paste into Matlab</a></li>
|
||||
</ul></li>
|
||||
<li><a href="#callinglibiglfunctionsfrommatlab">603 Calling libigl functions from Matlab</a></li>
|
||||
<li><a href="#triangulationofclosedpolygons">604 Triangulation of closed polygons</a></li>
|
||||
@@ -2297,9 +2292,10 @@ N are of different types and they appear in different positions.</p>
|
||||
<p>We demonstrate how to call and plot N-RoSy fields in <a href="504_NRosyDesign/main.cpp">Example
|
||||
504</a>, where the degree of the field can be change
|
||||
pressing the number keys. <code>igl::nrosy</code> implements the algorithm proposed in
|
||||
<a href="#cn:27" id="cnref:27" title="see citation" class="citation">(27)</a>[]. N-RoSy fields can also be interpolated with the algorithm
|
||||
proposed in <a href="#cn:28" id="cnref:28" title="see citation" class="citation">(28)</a>[], see Section <a href="#npolyvectorfields">npolyvectorfields</a> for more details
|
||||
(<a href="../include/igl/n_polyvector.h">igl::n_polyvector</a>).</p>
|
||||
<a href="#cn:27" id="cnref:27" title="see citation" class="citation">(27)</a>[]. N-RoSy fields can also be interpolated with many other algorithms,
|
||||
see the library <a href="https://github.com/avaxman/libdirectional">libdirectional</a> for
|
||||
a reference implementation of the most popular ones. For a complete categorization
|
||||
of fields used in various applications see Vaxman et al. 2016 <a href="#cn:28" id="cnref:28" title="see citation" class="citation">(28)</a>.</p>
|
||||
|
||||
<h3 id="globalseamlessintegergridparametrization"><a href="#globalseamlessintegergridparametrization">Global, seamless integer-grid parametrization</a> </h3>
|
||||
|
||||
@@ -2468,142 +2464,24 @@ generate the UV parametrization, but other algorithms could be applied: the
|
||||
only desiderata is that the generated quad mesh should be as isotropic as
|
||||
possible.</p>
|
||||
|
||||
<h2 id="npolyvectorfields"><a href="#npolyvectorfields">N-PolyVector fields</a> </h2>
|
||||
|
||||
<p>N-RoSy vector fields can be further generalized to represent arbitrary
|
||||
vector-sets, with arbitrary angles between them and with arbitrary lengths
|
||||
<a href="#cn:30" id="cnref:30" title="see citation" class="citation">(30)</a>[]. This generalization is called N-PolyVector field, and
|
||||
libigl provides the function <code>igl::n_polyvector</code> to design them starting from a
|
||||
sparse set of constraints (<a href="507_PolyVectorField/main.cpp">Example 507</a>).</p>
|
||||
|
||||
<figure>
|
||||
<img src="images/507_PolyVectorField.png" alt="Interpolation of a 6-PolyVector field (right) and a 12-PolyVector field from a sparse set of random constraints." />
|
||||
<figcaption>Interpolation of a 6-PolyVector field (right) and a 12-PolyVector field from a sparse set of random constraints.</figcaption>
|
||||
</figure>
|
||||
|
||||
<p>The core idea is to represent the vector set as the roots of a complex
|
||||
polynomial: The polynomial coefficients are then harmonically interpolated
|
||||
leading to polynomials whose roots smoothly vary over the surface.</p>
|
||||
|
||||
<p>Globally optimal direction fields <a href="#cn:28" title="see citation" class="citation">(28)</a>[] are a special case of
|
||||
PolyVector fields. If the constraints are taken from an N-RoSy field,
|
||||
<code>igl::n_polyvector</code> generates a field that is equivalent, after normalization,
|
||||
to a globally optimal direction field.</p>
|
||||
|
||||
<h2 id="conjugatevectorfields"><a href="#conjugatevectorfields">Conjugate vector fields</a> </h2>
|
||||
|
||||
<p>Two tangent vectors lying on a face of a triangle mesh are conjugate if</p>
|
||||
|
||||
<p><span class="math">\[ k_1 (u^T d_1)(v^T d_1) + k_2(u^T d_2)(v^T d_2) = 0. \]</span></p>
|
||||
|
||||
<p>This condition is very important in architectural geometry: The faces of an
|
||||
infinitely dense quad mesh whose edges are aligned with a conjugate field are
|
||||
planar. Thus, a quad mesh whose edges follow a conjugate field are easier to
|
||||
planarize <a href="#cn:31" id="cnref:31" title="see citation" class="citation">(31)</a>.</p>
|
||||
|
||||
<p>Finding a conjugate vector field that satisfies given directional constraints
|
||||
is a standard problem in architectural geometry, which can be tackled by
|
||||
deforming a Poly-Vector field to the closest conjugate field.</p>
|
||||
|
||||
<p>This algorithm <a href="#cn:30" title="see citation" class="citation">(30)</a> alternates a global step, which enforces
|
||||
smoothness, with a local step, that projects the field on every face to the
|
||||
closest conjugate field (<a href="508_ConjugateField/main.cpp">Example 508</a>).</p>
|
||||
|
||||
<figure>
|
||||
<img src="images/508_ConjugateField.png" alt="A smooth 4-PolyVector field (left) is deformed to become a conjugate field
|
||||
(right)." />
|
||||
<figcaption>A smooth 4-PolyVector field (left) is deformed to become a conjugate field
|
||||
(right).</figcaption>
|
||||
</figure>
|
||||
|
||||
<h2 id="planarization"><a href="#planarization">Planarization</a> </h2>
|
||||
|
||||
<p>A quad mesh can be transformed in a planar quad mesh with Shape-Up
|
||||
<a href="#cn:32" id="cnref:32" title="see citation" class="citation">(32)</a>, a local/global approach that uses the global step to enforce
|
||||
<a href="#cn:30" id="cnref:30" title="see citation" class="citation">(30)</a>, a local/global approach that uses the global step to enforce
|
||||
surface continuity and the local step to enforce planarity.</p>
|
||||
|
||||
<p><a href="509_Planarization/main.cpp">Example 509</a> planarizes a quad mesh until it
|
||||
<p><a href="507_Planarization/main.cpp">Example 507</a> planarizes a quad mesh until it
|
||||
satisfies a user-given planarity threshold.</p>
|
||||
|
||||
<figure>
|
||||
<img src="images/509_Planarization.png" alt="A non-planar quad mesh (left) is planarized using the libigl function
|
||||
igl::palanarize (right). The colors represent the planarity of the
|
||||
igl::planarize (right). The colors represent the planarity of the
|
||||
quads." />
|
||||
<figcaption>A non-planar quad mesh (left) is planarized using the libigl function
|
||||
igl::palanarize (right). The colors represent the planarity of the
|
||||
igl::planarize (right). The colors represent the planarity of the
|
||||
quads.</figcaption>
|
||||
</figure>
|
||||
|
||||
<h2 id="integrable"><a href="#integrable">Integrable PolyVector Fields</a> </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 href="#cn:26" title="see citation" class="citation">(26)</a>[], <a href="#cn:28" title="see citation" class="citation">(28)</a>[], <a href="#cn:30" title="see citation" class="citation">(30)</a>[], <a href="#cn:27" title="see citation" class="citation">(27)</a>[],
|
||||
<a href="#cn:29" title="see citation" class="citation">(29)</a>[]) do not have this property. In <a href="#cn:33" id="cnref:33" title="see citation" class="citation">(33)</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>
|
||||
|
||||
<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 href="#cn:30" title="see citation" class="citation">(30)</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 href="#cn:34" id="cnref:34" title="see citation" class="citation">(34)</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
|
||||
@@ -2998,7 +2876,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 href="#cn:35" id="cnref:35" title="see citation" class="citation">(35)</a>[] using a variety of
|
||||
<p>Libigl can be used to compute Locally Injective Maps <a href="#cn:31" id="cnref:31" title="see citation" class="citation">(31)</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>
|
||||
|
||||
@@ -3056,7 +2934,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
|
||||
“mesh arrangement” (see <a href="#cn:36" id="cnref:36" title="see citation" class="citation">(36)</a>[]) with vertices <code>V</code> and triangles <code>F</code> where all triangle-triangle
|
||||
“mesh arrangement” (see <a href="#cn:32" id="cnref:32" title="see citation" class="citation">(32)</a>[]) with vertices <code>V</code> and triangles <code>F</code> where all triangle-triangle
|
||||
intersections have been “resolved”. 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>
|
||||
@@ -3199,7 +3077,7 @@ mesh and which are outside. That is, which should be kept and which should be
|
||||
removed.</p>
|
||||
|
||||
<p>The “Generalized Winding Number” is a robust method for determined
|
||||
inside and outside for troublesome meshes <a href="#cn:37" id="cnref:37" title="see citation" class="citation">(37)</a>[]. The generalized
|
||||
inside and outside for troublesome meshes <a href="#cn:33" id="cnref:33" title="see citation" class="citation">(33)</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>
|
||||
|
||||
@@ -3242,7 +3120,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 href="#cn:38" id="cnref:38" title="see citation" class="citation">(38)</a>[]. The generic form of this technique is to
|
||||
collapsing edges <a href="#cn:34" id="cnref:34" title="see citation" class="citation">(34)</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>
|
||||
|
||||
@@ -3443,8 +3321,8 @@ tree.squared_distance(V,F,P,sqrD,I,C);
|
||||
|
||||
<p>Finally, from the closest point or the winding number it’s possible to <em>sign</em>
|
||||
this distance. In <code>igl::signed_distance</code> we provide two methods for signing:
|
||||
the so-called “pseudo-normal test” <a href="#cn:39" id="cnref:39" title="see citation" class="citation">(39)</a>[] and the generalized
|
||||
winding number <a href="#cn:37" title="see citation" class="citation">(37)</a>[].</p>
|
||||
the so-called “pseudo-normal test” <a href="#cn:35" id="cnref:35" title="see citation" class="citation">(35)</a>[] and the generalized
|
||||
winding number <a href="#cn:33" title="see citation" class="citation">(33)</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
|
||||
@@ -3488,7 +3366,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>“Marching Cubes” <a href="#cn:40" id="cnref:40" title="see citation" class="citation">(40)</a> is a <a href="https://en.wikipedia.org/wiki/Marching_cubes">famous
|
||||
<p>“Marching Cubes” <a href="#cn:36" id="cnref:36" title="see citation" class="citation">(36)</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
|
||||
@@ -3539,7 +3417,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 href="#cn:41" id="cnref:41" title="see citation" class="citation">(41)</a>[] assumes
|
||||
right-hand-rule normal pointing outward. This method <a href="#cn:37" id="cnref:37" title="see citation" class="citation">(37)</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.
|
||||
@@ -3601,11 +3479,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 href="#cn:40" title="see citation" class="citation">(40)</a>.</p>
|
||||
<a href="#cn:36" title="see citation" class="citation">(36)</a>.</p>
|
||||
|
||||
<p>This method is similar to one described by Schroeder et al. in 1994
|
||||
<a href="#cn:42" id="cnref:42" title="see citation" class="citation">(42)</a>, and the one used in conjunction with boolean operations by
|
||||
Garg et al. 2016 <a href="#cn:43" id="cnref:43" title="see citation" class="citation">(43)</a>.</p>
|
||||
<a href="#cn:38" id="cnref:38" title="see citation" class="citation">(38)</a>, and the one used in conjunction with boolean operations by
|
||||
Garg et al. 2016 <a href="#cn:39" id="cnref:39" title="see citation" class="citation">(39)</a>.</p>
|
||||
|
||||
<p>In libigl, if your input solid’s surface is represented by <code>(V,F)</code> then the
|
||||
output surface mesh will be <code>(SV,SF)</code> after calling:</p>
|
||||
@@ -3677,7 +3555,7 @@ in <a href="709_VectorFieldVisualizer/main.cpp">Example 709</a>.</p>
|
||||
|
||||
<h2 id="slim"><a href="#slim">Scalable Locally Injective Maps</a> </h2>
|
||||
|
||||
<p>The Scalable Locally Injective Maps <a href="#cn:44" id="cnref:44" title="see citation" class="citation">(44)</a> algorithm allows to
|
||||
<p>The Scalable Locally Injective Maps <a href="#cn:40" id="cnref:40" title="see citation" class="citation">(40)</a> algorithm allows to
|
||||
compute locally injective maps on massive datasets. The algorithm shares many
|
||||
similarities with ARAP, but uses a reweighting scheme to minimize arbitrary
|
||||
distortion energies, including those that prevent the introduction of flips.</p>
|
||||
@@ -3721,7 +3599,7 @@ a finer and finer mesh.</p>
|
||||
|
||||
<p>The subdivision method of <code>igl::loop</code> is not in plane. The vertices of the
|
||||
refined mesh are moved to weight combinations of their neighbors: the mesh is
|
||||
smoothed as it is refined <a href="#cn:45" id="cnref:45" title="see citation" class="citation">(45)</a>. This and other <em>smooth subdivision</em>
|
||||
smoothed as it is refined <a href="#cn:41" id="cnref:41" title="see citation" class="citation">(41)</a>. This and other <em>smooth subdivision</em>
|
||||
methods can be understood as generalizations of spline curves to surfaces. In
|
||||
particular the Loop subdivision method will converge to a <span class="math">\(C^1\)</span> surface as we
|
||||
consider the limit of recursive applications of subdivision. Away from
|
||||
@@ -4004,10 +3882,11 @@ quadrangulation</a>,
|
||||
</li>
|
||||
|
||||
<li id="cn:28">
|
||||
<p>Felix Knöppel, Keenan Crane, Ulrich Pinkall, and Peter
|
||||
Schröder. <a href="http://www.cs.columbia.edu/~keenan/Projects/GloballyOptimalDirectionFields/paper.pdf">Globally Optimal Direction
|
||||
Fields</a>,
|
||||
2013. <a href="#cnref:28" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
<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 <a href="#cnref:28" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
</li>
|
||||
|
||||
<li id="cn:29">
|
||||
@@ -4018,108 +3897,82 @@ Fields</a>,
|
||||
</li>
|
||||
|
||||
<li id="cn:30">
|
||||
<p>Olga Diamanti, Amir Vaxman, Daniele Panozzo, Olga
|
||||
Sorkine–Hornung. <a href="http://igl.ethz.ch/projects/complex-roots/">Designing N–PolyVector Fields with Complex
|
||||
Polynomials</a>, 2014 <a href="#cnref:30" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
<p>Sofien Bouaziz, Mario Deuss, Yuliy Schwartzburg, Thibaut Weise, Mark Pauly
|
||||
<a href="http://lgg.epfl.ch/publications/2012/shapeup.pdf">Shape–Up: Shaping Discrete Geometry with
|
||||
Projections</a>, 2012 <a href="#cnref:30" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
</li>
|
||||
|
||||
<li id="cn:31">
|
||||
<p>Yang Liu, Weiwei Xu, Jun Wang, Lifeng Zhu, Baining Guo, Falai Chen, Guoping
|
||||
Wang. <a href="http://research.microsoft.com/en-us/um/people/yangliu/publication/cdf.pdf">General Planar Quadrilateral Mesh Design Using Conjugate Direction
|
||||
Field</a>,
|
||||
2008. <a href="#cnref:31" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
<p>Christian Schüller, Ladislav Kavan, Daniele Panozzo, Olga
|
||||
Sorkine–Hornung. <a href="http://igl.ethz.ch/projects/LIM/">Locally Injective
|
||||
Mappings</a>, 2013. <a href="#cnref:31" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
</li>
|
||||
|
||||
<li id="cn:32">
|
||||
<p>Sofien Bouaziz, Mario Deuss, Yuliy Schwartzburg, Thibaut Weise, Mark Pauly
|
||||
<a href="http://lgg.epfl.ch/publications/2012/shapeup.pdf">Shape–Up: Shaping Discrete Geometry with
|
||||
Projections</a>, 2012 <a href="#cnref:32" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
</li>
|
||||
|
||||
<li id="cn:33">
|
||||
<p>Olga Diamanti, Amir Vaxman, Daniele Panozzo, Olga
|
||||
Sorkine–Hornung. <a href="http://igl.ethz.ch/projects/integrable/">Integrable PolyVector Fields</a>, 2015 <a href="#cnref:33" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
</li>
|
||||
|
||||
<li id="cn:34">
|
||||
<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 <a href="#cnref:34" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
</li>
|
||||
|
||||
<li id="cn:35">
|
||||
<p>Christian Schüller, Ladislav Kavan, Daniele Panozzo, Olga
|
||||
Sorkine–Hornung. <a href="http://igl.ethz.ch/projects/LIM/">Locally Injective
|
||||
Mappings</a>, 2013. <a href="#cnref:35" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
</li>
|
||||
|
||||
<li id="cn:36">
|
||||
<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 <a href="#cnref:36" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
2016 <a href="#cnref:32" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
</li>
|
||||
|
||||
<li id="cn:37">
|
||||
<li id="cn:33">
|
||||
<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. <a href="#cnref:37" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
2013. <a href="#cnref:33" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
</li>
|
||||
|
||||
<li id="cn:38">
|
||||
<li id="cn:34">
|
||||
<p>Hugues Hoppe. <a href="https://www.google.com/search?q=Progressive+meshes">Progressive
|
||||
Meshes</a>, 1996 <a href="#cnref:38" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
Meshes</a>, 1996 <a href="#cnref:34" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
</li>
|
||||
|
||||
<li id="cn:39">
|
||||
<li id="cn:35">
|
||||
<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. <a href="#cnref:39" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
2005. <a href="#cnref:35" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
</li>
|
||||
|
||||
<li id="cn:40">
|
||||
<li id="cn:36">
|
||||
<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. <a href="#cnref:40" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
1987. <a href="#cnref:36" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
</li>
|
||||
|
||||
<li id="cn:41">
|
||||
<li id="cn:37">
|
||||
<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. <a href="#cnref:41" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
2014. <a href="#cnref:37" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
</li>
|
||||
|
||||
<li id="cn:42">
|
||||
<li id="cn:38">
|
||||
<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. <a href="#cnref:42" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
1994. <a href="#cnref:38" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
</li>
|
||||
|
||||
<li id="cn:43">
|
||||
<li id="cn:39">
|
||||
<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 <a href="#cnref:43" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
2016 <a href="#cnref:39" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
</li>
|
||||
|
||||
<li id="cn:44">
|
||||
<li id="cn:40">
|
||||
<p>Michael Rabinovich, Roi Poranne, Daniele Panozzo, Olga
|
||||
Sorkine–Hornung. <a href="http://cs.nyu.edu/~panozzo/papers/SLIM-2016.pdf">Scalable Locally Injective
|
||||
Mappings</a>, 2016. <a href="#cnref:44" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
Mappings</a>, 2016. <a href="#cnref:40" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
</li>
|
||||
|
||||
<li id="cn:45">
|
||||
<li id="cn:41">
|
||||
<p>Charles Loop. <a href="https://www.google.com/search?q=smooth+subdivision+surfaces+based+on+triangles">Smooth Subdivision Surfaces Based on
|
||||
Triangles</a>,
|
||||
1987. <a href="#cnref:45" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
1987. <a href="#cnref:41" title="return to body" class="reversecitation"> ↩</a></p>
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
|
||||
Reference in New Issue
Block a user