Skip to main content

Module limit

Module limit 

Source
Expand description

The limit surface of a once-subdivided cage (see crate::subdivide), as one bicubic Bézier patch per quad.

Every quad’s patch is put together from three kinds of control points, each computed once and shared by every patch it belongs to:

  • a corner per vertex: its limit position;
  • two edge points per edge, one near each end, which with the corners make up the cubic every patch along that edge has as its boundary — computed per edge, not per patch, so neighbouring patches meet along exactly the same curve, and the B-rep built from them is closed;
  • an interior point per corner of every quad.

This is Loop and Schaefer’s approximation of Catmull–Clark surfaces by bicubic patches: where all four corners of a quad and its neighbours are regular — smooth, four faces each — it gives exactly the uniform bicubic B-spline that is the limit surface there. Around an extraordinary vertex it is an approximation: the patches meet along shared curves, with a continuous normal at every vertex — every edge point next to a smooth vertex lies in its limit tangent plane — but across the edges out of an extraordinary vertex the normal turns by a few degrees.

Creased and boundary edges are sharp: their curve is the cubic B-spline of their vertices, which the patches on either side share, and the interior points next to them are computed per sector, the faces around a vertex between two sharp edges, as if that sector were mirrored into a regular vertex’s: weight n is the vertex’s number of faces where it is smooth, twice the sector’s along a crease, four times at a corner.

Structs§

ControlNet
The shared control points of every patch of a subdivided mesh.

Functions§

control_net
The control net of mesh’s limit surface (see the module docs).

Type Aliases§

Patch
A bicubic Bézier patch, b[i][j] with i along its first side.