|
![](/i/fill.gif) |
I am attempting to comprehend NURBS.
NURBS are of course Non-Uniform Rational B-Splines.
using de Casteljau's algorithm:
Plot(T, P[])
If P[] contains just one point, return it. Otherwise...
Construct Q[] by linearly interpolating between each adjacent pair
of points in P[], at parameter=T.
Recursively call Plot(T, Q[]).
Since Q[] is exactly one element smaller than P[], eventually the
recursion terminates. (And in practice, the initial set of constrol
points is something like 3 or so.)
control points to generate a new, smaller set of control points. Repeat
until you have a single point left.
except that each control point has a "weight". What the algorithm
appears to do is draw the spline in 3D and then perspective-project it
back into 2D. The control points are positioned so that their apparent
2D position is unaltered, but the Z coordinate is the weight. Changing
the weight doesn't alter the apparent position of the control point, but
does alter the way the rest of the curve projects back into 2D. (In
particular, a negative weight puts the control point behind the camera.)
has a "knot vector" which controls how much of the curve is influenced
by a specific control point. A B-spline can be "uniform" (all knots
equally spaced) or "non-uniform" (knot spacing is unequal).
This much I understand. What I don't yet understand is the fine detail
of how B-splines actually work.
A NURBS is simply a B-spline which is (potentially) non-uniform (i.e.,
the knots are adjustable) and rational (i.e., it uses this strange 3D
projection trick). So if I could just understand B-splines, I would be
able to comprehend NURBS.
The degree of a B-spline, the number of control points and the number of
knots are all related in some way which I don't quite understand. The
degree and the knots generate the basis functions, and the curve itself
is just a linear combination of the basis functions multiplied by the
control points. So if I could just figure this last part out...
Post a reply to this message
|
![](/i/fill.gif) |