Loading [MathJax]/extensions/TeX/AMSmath.js
Radium Engine  1.5.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
Ra::Core::Geometry::CatmullClarkSubdivider Class Reference

#include <Core/Geometry/CatmullClarkSubdivider.hpp>

Inherits OpenMesh::Subdivider::Uniform::SubdividerT< deprecated::TopologicalMesh, Scalar >.

+ Collaboration diagram for Ra::Core::Geometry::CatmullClarkSubdivider:

Public Member Functions

 CatmullClarkSubdivider (deprecated::TopologicalMesh &mesh)
 
const char * name (void) const override
 
void recompute (const Vector3Array &newCoarseVertices, const Vector3Array &newCoarseNormals, Vector3Array &newSubdivVertices, Vector3Array &newSubdivNormals, deprecated::TopologicalMesh &mesh)
 

Protected Member Functions

bool prepare (deprecated::TopologicalMesh &_m) override
 
bool cleanup (deprecated::TopologicalMesh &_m) override
 
bool subdivide (deprecated::TopologicalMesh &_m, size_t _n, const bool _update_points=true) override
 

Detailed Description

This class implements the Catmull-Clark subdivision algorithm

This class extends OpenMesh's CatmullClarkT subdivider to handle attributes.

Note
We here consider that boundary halfedges do not store attributes.

Definition at line 17 of file CatmullClarkSubdivider.hpp.

Member Function Documentation

◆ recompute()

void Ra::Core::Geometry::CatmullClarkSubdivider::recompute ( const Vector3Array &  newCoarseVertices,
const Vector3Array &  newCoarseNormals,
Vector3Array &  newSubdivVertices,
Vector3Array &  newSubdivNormals,
deprecated::TopologicalMesh mesh 
)

In the case one wants to apply the subdivision on the same mesh topology, but with a different geometry (e.g. for an animated character), one may want to just reapply the subdivision operations instead for performance reasons. This can be achieved with the following code:

// 1- apply subdivision once
Ra::Core::Geometry::TriangleMesh triangleMesh;
Ra::Core::CatmullClarkSubdivider subdiv( topoMesh );
subdiv( 2 );
// get back to TriangleMesh (mandatory before re-applying)
TriangleMesh subdividedMesh = topoMesh.toTriangleMesh();
// 2- re-apply operations on new geometry (new_vertices, new_normals)
m_subdivider.recompute( new_vertices, new_normals, subdividedMesh.vertices(),
subdividedMesh.normals(), topoMesh );

Definition at line 431 of file CatmullClarkSubdivider.cpp.

+ Here is the call graph for this function:

The documentation for this class was generated from the following files: