Polygon Mesh Processing Library
Loading...
Searching...
No Matches
core

Core data structure and utilities. More...

Classes

class  BoundingBox
 Simple class for representing a bounding box. More...
 
class  InvalidInputException
 Exception indicating invalid input passed to a function. More...
 
class  SolverException
 Exception indicating failure so solve an equation system. More...
 
class  AllocationException
 Exception indicating failure to allocate a new resource. More...
 
class  TopologyException
 Exception indicating a topological error has occurred. More...
 
class  IOException
 Exception indicating an error occurred while performing IO. More...
 
class  GLException
 Exception indicating an OpenGL error. More...
 
class  Matrix< Scalar, M, N >
 Generic class for \( M \times N \) matrices. More...
 
class  MemoryUsage
 A simple class to retrieve memory usage information. More...
 
class  StopWatch
 A simple stop watch class. More...
 
class  Handle
 Base class for all entity handles types. More...
 
class  Vertex
 this type represents a vertex (internally it is basically an index) More...
 
class  Halfedge
 this type represents a halfedge (internally it is basically an index) More...
 
class  Edge
 this type represents an edge (internally it is basically an index) More...
 
class  Face
 this type represents a face (internally it is basically an index) More...
 
class  VertexProperty< T >
 Vertex property of type T. More...
 
class  HalfedgeProperty< T >
 Halfedge property of type T. More...
 
class  EdgeProperty< T >
 Edge property of type T. More...
 
class  FaceProperty< T >
 Face property of type T. More...
 
class  SurfaceMesh
 A class for representing polygon surface meshes. More...
 

Typedefs

template<typename Scalar , int M>
using Vector = Matrix< Scalar, M, 1 >
 template specialization for Vector as Nx1 matrix
 
template<typename Scalar >
using Mat4 = Matrix< Scalar, 4, 4 >
 template specialization for 4x4 matrices
 
template<typename Scalar >
using Mat3 = Matrix< Scalar, 3, 3 >
 template specialization for 3x3 matrices
 
template<typename Scalar >
using Mat2 = Matrix< Scalar, 2, 2 >
 template specialization for 2x2 matrices
 
using vec2 = Vector< float, 2 >
 template specialization for a vector of two float values
 
using dvec2 = Vector< double, 2 >
 template specialization for a vector of two double values
 
using bvec2 = Vector< bool, 2 >
 template specialization for a vector of two bool values
 
using ivec2 = Vector< int, 2 >
 template specialization for a vector of two int values
 
using uvec2 = Vector< unsigned int, 2 >
 template specialization for a vector of two unsigned int values
 
using vec3 = Vector< float, 3 >
 template specialization for a vector of three float values
 
using dvec3 = Vector< double, 3 >
 template specialization for a vector of three double values
 
using bvec3 = Vector< bool, 3 >
 template specialization for a vector of three bool values
 
using ivec3 = Vector< int, 3 >
 template specialization for a vector of three int values
 
using uvec3 = Vector< unsigned int, 3 >
 template specialization for a vector of three unsigned int values
 
using vec4 = Vector< float, 4 >
 template specialization for a vector of four float values
 
using dvec4 = Vector< double, 4 >
 template specialization for a vector of four double values
 
using bvec4 = Vector< bool, 4 >
 template specialization for a vector of four bool values
 
using ivec4 = Vector< int, 4 >
 template specialization for a vector of four int values
 
using uvec4 = Vector< unsigned int, 4 >
 template specialization for a vector of four unsigned int values
 
using mat2 = Mat2< float >
 template specialization for a 2x2 matrix of float values
 
using dmat2 = Mat2< double >
 template specialization for a 2x2 matrix of double values
 
using mat3 = Mat3< float >
 template specialization for a 3x3 matrix of float values
 
using dmat3 = Mat3< double >
 template specialization for a 3x3 matrix of double values
 
using mat4 = Mat4< float >
 template specialization for a 4x4 matrix of float values
 
using dmat4 = Mat4< double >
 template specialization for a 4x4 matrix of double values
 
using Scalar = float
 Scalar type.
 
using Point = Vector< Scalar, 3 >
 Point type.
 
using Normal = Vector< Scalar, 3 >
 Normal type.
 
using Color = Vector< Scalar, 3 >
 Color type.
 
using TexCoord = Vector< Scalar, 2 >
 Texture coordinate type.
 

Functions

template<typename Scalar , int M, int N>
std::ostream & operator<< (std::ostream &os, const Matrix< Scalar, M, N > &m)
 output a matrix by printing its space-separated components
 
template<typename Scalar , int M, int N, int K>
Matrix< Scalar, M, N > operator* (const Matrix< Scalar, M, K > &m1, const Matrix< Scalar, K, N > &m2)
 matrix-matrix multiplication
 
template<typename Scalar , int M, int N>
Matrix< Scalar, M, N > cmult (const Matrix< Scalar, M, N > &m1, const Matrix< Scalar, M, N > &m2)
 component-wise multiplication
 
template<typename Scalar , int M, int N>
Matrix< Scalar, N, M > transpose (const Matrix< Scalar, M, N > &m)
 transpose MxN matrix to NxM matrix
 
template<typename Scalar , int M, int N>
Matrix< Scalar, M, N > operator+ (const Matrix< Scalar, M, N > &m1, const Matrix< Scalar, M, N > &m2)
 matrix addition: m1 + m2
 
template<typename Scalar , int M, int N>
Matrix< Scalar, M, N > operator- (const Matrix< Scalar, M, N > &m1, const Matrix< Scalar, M, N > &m2)
 matrix subtraction: m1 - m2
 
template<typename Scalar , int M, int N>
Matrix< Scalar, M, N > operator- (const Matrix< Scalar, M, N > &m)
 matrix negation: -m
 
template<typename Scalar , typename Scalar2 , int M, int N>
Matrix< Scalar, M, N > operator* (const Scalar2 s, const Matrix< Scalar, M, N > &m)
 scalar multiplication of matrix: s*m
 
template<typename Scalar , typename Scalar2 , int M, int N>
Matrix< Scalar, M, N > operator* (const Matrix< Scalar, M, N > &m, const Scalar2 s)
 scalar multiplication of matrix: m*s
 
template<typename Scalar , typename Scalar2 , int M, int N>
Matrix< Scalar, M, N > operator/ (const Matrix< Scalar, M, N > &m, const Scalar2 s)
 divide matrix by scalar: m/s
 
template<typename Scalar , int M, int N>
Scalar norm (const Matrix< Scalar, M, N > &m)
 compute the Frobenius norm of a matrix (or Euclidean norm of a vector)
 
template<typename Scalar , int M, int N>
Scalar sqrnorm (const Matrix< Scalar, M, N > &m)
 compute the squared Frobenius norm of a matrix (or squared Euclidean norm of a vector)
 
template<typename Scalar , int M, int N>
Matrix< Scalar, M, N > normalize (const Matrix< Scalar, M, N > &m)
 return a normalized copy of a matrix or a vector
 
template<typename Scalar , int M, int N>
Matrix< Scalar, M, N > min (const Matrix< Scalar, M, N > &m1, const Matrix< Scalar, M, N > &m2)
 return component-wise minimum
 
template<typename Scalar , int M, int N>
Matrix< Scalar, M, N > max (const Matrix< Scalar, M, N > &m1, const Matrix< Scalar, M, N > &m2)
 return component-wise maximum
 
template<typename Scalar >
Mat4< Scalarviewport_matrix (Scalar l, Scalar b, Scalar w, Scalar h)
 OpenGL viewport matrix with parameters left, bottom, width, height.
 
template<typename Scalar >
Mat4< Scalarinverse_viewport_matrix (Scalar l, Scalar b, Scalar w, Scalar h)
 inverse of OpenGL viewport matrix with parameters left, bottom, width, height
 
template<typename Scalar >
Mat4< Scalarfrustum_matrix (Scalar l, Scalar r, Scalar b, Scalar t, Scalar n, Scalar f)
 OpenGL frustum matrix with parameters left, right, bottom, top, near, far.
 
template<typename Scalar >
Mat4< Scalarinverse_frustum_matrix (Scalar l, Scalar r, Scalar b, Scalar t, Scalar n, Scalar f)
 inverse of OpenGL frustum matrix with parameters left, right, bottom, top, near, far
 
template<typename Scalar >
Mat4< Scalarperspective_matrix (Scalar fovy, Scalar aspect, Scalar zNear, Scalar zFar)
 OpenGL perspective matrix with parameters field of view in y-direction, aspect ratio, and distance of near and far planes.
 
template<typename Scalar >
Mat4< Scalarinverse_perspective_matrix (Scalar fovy, Scalar aspect, Scalar zNear, Scalar zFar)
 inverse of perspective matrix
 
template<typename Scalar >
Mat4< Scalarortho_matrix (Scalar left, Scalar right, Scalar bottom, Scalar top, Scalar zNear=-1, Scalar zFar=1)
 OpenGL orthogonal projection matrix with parameters left, right, bottom, top, near, far.
 
template<typename Scalar >
Mat4< Scalarlook_at_matrix (const Vector< Scalar, 3 > &eye, const Vector< Scalar, 3 > &center, const Vector< Scalar, 3 > &up)
 OpenGL look-at camera matrix with parameters eye position, scene center, up-direction.
 
template<typename Scalar >
Mat4< Scalartranslation_matrix (const Vector< Scalar, 3 > &t)
 OpenGL matrix for translation by vector t.
 
template<typename Scalar >
Mat4< Scalarscaling_matrix (const Scalar s)
 OpenGL matrix for scaling x/y/z by s.
 
template<typename Scalar >
Mat4< Scalarscaling_matrix (const Vector< Scalar, 3 > &s)
 OpenGL matrix for scaling x/y/z by the components of s.
 
template<typename Scalar >
Mat4< Scalarrotation_matrix_x (Scalar angle)
 OpenGL matrix for rotation around x-axis by given angle (in degrees)
 
template<typename Scalar >
Mat4< Scalarrotation_matrix_y (Scalar angle)
 OpenGL matrix for rotation around y-axis by given angle (in degrees)
 
template<typename Scalar >
Mat4< Scalarrotation_matrix_z (Scalar angle)
 OpenGL matrix for rotation around z-axis by given angle (in degrees)
 
template<typename Scalar >
Mat4< Scalarrotation_matrix (const Vector< Scalar, 3 > &axis, Scalar angle)
 OpenGL matrix for rotation around given axis by given angle (in degrees)
 
template<typename Scalar >
Mat4< Scalarrotation_matrix (const Vector< Scalar, 4 > &quat)
 OpenGL matrix for rotation specified by unit quaternion.
 
template<typename Scalar >
Mat3< Scalarlinear_part (const Mat4< Scalar > &m)
 return upper 3x3 matrix from given 4x4 matrix, corresponding to the linear part of an affine transformation
 
template<typename Scalar >
Vector< Scalar, 3 > projective_transform (const Mat4< Scalar > &m, const Vector< Scalar, 3 > &v)
 projective transformation of 3D vector v by a 4x4 matrix m: add 1 as 4th component of v, multiply m*v, divide by 4th component
 
template<typename Scalar >
Vector< Scalar, 3 > affine_transform (const Mat4< Scalar > &m, const Vector< Scalar, 3 > &v)
 affine transformation of 3D vector v by a 4x4 matrix m: add 1 as 4th component of v, multiply m*v, do NOT divide by 4th component
 
template<typename Scalar >
Vector< Scalar, 3 > linear_transform (const Mat4< Scalar > &m, const Vector< Scalar, 3 > &v)
 linear transformation of 3D vector v by a 4x4 matrix m: transform vector by upper-left 3x3 submatrix of m
 
template<typename Scalar >
Mat4< Scalarinverse (const Mat4< Scalar > &m)
 return the inverse of a 4x4 matrix
 
template<typename Scalar >
Scalar determinant (const Mat3< Scalar > &m)
 return determinant of 3x3 matrix
 
template<typename Scalar >
Mat3< Scalarinverse (const Mat3< Scalar > &m)
 return the inverse of a 3x3 matrix
 
template<typename Scalar >
bool symmetric_eigendecomposition (const Mat3< Scalar > &m, Scalar &eval1, Scalar &eval2, Scalar &eval3, Vector< Scalar, 3 > &evec1, Vector< Scalar, 3 > &evec2, Vector< Scalar, 3 > &evec3)
 compute eigenvector/eigenvalue decomposition of a 3x3 matrix
 
template<typename Scalar , int N>
std::istream & operator>> (std::istream &is, Vector< Scalar, N > &vec)
 read the space-separated components of a vector from a stream
 
template<typename Scalar , int N>
std::ostream & operator<< (std::ostream &os, const Vector< Scalar, N > &vec)
 output a vector by printing its space-separated compontens
 
template<typename Scalar , int N>
Scalar dot (const Vector< Scalar, N > &v0, const Vector< Scalar, N > &v1)
 compute the dot product of two vectors
 
template<typename Scalar , int N>
Scalar distance (const Vector< Scalar, N > &v0, const Vector< Scalar, N > &v1)
 compute the Euclidean distance between two points
 
template<typename Scalar >
Vector< Scalar, 2 > perp (const Vector< Scalar, 2 > &v)
 compute perpendicular vector (rotate vector counter-clockwise by 90 degrees)
 
template<typename Scalar >
Vector< Scalar, 3 > cross (const Vector< Scalar, 3 > &v0, const Vector< Scalar, 3 > &v1)
 compute the cross product of two vectors (only valid for 3D vectors)
 
std::ostream & operator<< (std::ostream &os, Vertex v)
 output a Vertex to a stream
 
std::ostream & operator<< (std::ostream &os, Halfedge h)
 output a Halfedge to a stream
 
std::ostream & operator<< (std::ostream &os, Edge e)
 output an Edge to a stream
 
std::ostream & operator<< (std::ostream &os, Face f)
 output a Face to a stream
 
static Matrix< Scalar, M, N > identity ()
 return identity matrix (only for square matrices, N==M)
 

Detailed Description

Core data structure and utilities.

The central class of the library is SurfaceMesh: A class for representing polygon surface meshes.

The Matrix class provides basic matrix and vector operations.

Utility classes:

Typedef Documentation

◆ Color

using Color = Vector<Scalar, 3>

Color type.

RGB values in the range of [0,1]

Function Documentation

◆ identity()

Matrix< Scalar, M, N > identity
static

return identity matrix (only for square matrices, N==M)

identity matrix (work only for square matrices)

◆ inverse_frustum_matrix()

Mat4< Scalar > inverse_frustum_matrix ( Scalar  l,
Scalar  r,
Scalar  b,
Scalar  t,
Scalar  n,
Scalar  f 
)

inverse of OpenGL frustum matrix with parameters left, right, bottom, top, near, far

See also
frustum_matrix

◆ inverse_perspective_matrix()

Mat4< Scalar > inverse_perspective_matrix ( Scalar  fovy,
Scalar  aspect,
Scalar  zNear,
Scalar  zFar 
)

inverse of perspective matrix

See also
perspective_matrix

◆ inverse_viewport_matrix()

Mat4< Scalar > inverse_viewport_matrix ( Scalar  l,
Scalar  b,
Scalar  w,
Scalar  h 
)

inverse of OpenGL viewport matrix with parameters left, bottom, width, height

See also
viewport_matrix