Skip to content

Parameterization Quantities

A parameterization is a set of 2D coordinates associated with a mesh, often referred to as “UV coordinates”. This sections details several functions for visualizing such parameterizations.

#include "polyscope/surface_mesh.h"

param_demo

Example: visualizing an LSCM parameterization via libIGL

using namespace Eigen;
using namespace std;

// Fix two points on the boundary
VectorXi bnd, b(2, 1);
igl::boundary_loop(meshF, bnd);

if (bnd.size() == 0) {
  polyscope::warning("mesh has no boundary, cannot parameterize");
  return;
}

b(0) = bnd(0);
b(1) = bnd(round(bnd.size() / 2));
MatrixXd bc(2, 2);
bc << 0, 0, 1, 0;

// LSCM parametrization
Eigen::MatrixXd V_uv;
igl::lscm(meshV, meshF, b, bc, V_uv);

polyscope::getSurfaceMesh("input mesh")
    ->addVertexParameterizationQuantity("LSCM parameterization", V_uv);

Adding

SurfaceMesh::addParameterizationQuantity(std::string name, const T& coords)

Add a new parameterization quantity to the structure, defined at the corners of a mesh.

  • coords is the array of 2D UV coordinates at corners. The type should be adaptable to an array of float-valued 2-vectors. The length should be the number of corners in the mesh.
SurfaceMesh::addVertexParameterizationQuantity(std::string name, const T& coords)

Add a new parameterization quantity to the structure, defined at the vertices of a mesh.

  • coords is the array of 2D UV coordinates at vertices. The type should be adaptable to an array of float-valued 2-vectors. The length should be the number of vertices in the mesh.
SurfaceMesh::addLocalParameterizationQuantity(std::string name, const T& coords)

Add a new parameterization quantity to the structure, defined at the vertices of a mesh. this is similar to addVertexParameterizationQuantity, but has preset settings for style and type which are suitable for local parameterizations about a point.

  • coords is the array of 2D UV coordinates at vertices. The type should be adaptable to an array of float-valued 2-vectors. The length should be the number of vertices in the mesh.

Options

Styles

Several styles are available for how a parameterization is displayed.

The enum class ParamVizStyle has options for how parameterizations are visualized:

  • CHECKER: a two-color checker pattern
  • GRID: a grid with thin lines
  • LOCAL_CHECK: a checkboard over a radial colormap, centered around (0,0)
  • LOCAL_RAD: distance stripes over a radial colormap, centered around (0,0)

The function SurfaceParameterizationQuantity::setStyle(ParamVizStyle newStyle) can be used to programmatically change the style.

Types

The enum class ParamCoordsType has options that control how parameter coordinates are interpreted:

  • UNIT: UV coords are assumed to lie on the [0,1] interval
  • WORLD: UV coords are assumed to be scaled like the world-space positions of the mesh

These enums can be passed as an optional third argument when a parameterization is registered.