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§
- Control
Net - 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]withialong its first side.