If we consider a Bezier curve segment, for example, defined by
P(s) = S M G_bez, S = [ s^3 s^2 s 1 ], s in [0,1]we can choose to let the elements of G_bez to be Bezier curves:
[ P1(t) ] G_bez = [ P2(t) ] [ P3(t) ] [ P4(t) ]where
P1(t) = T M G1 P2(t) = T M G2 P3(t) = T M G3 P4(t) = T M G4Each of G1, G2, G3, and G4 are geometry vectors which specify parametric cubic curves in t for one the four control points of the original curve P(s). There are thus 16 values that are needed to specify each of x(s,t), y(s,t) and z(s,t).
It would be nice if there was a way to write P(s,t) in a suitably compact way. This can be done as follows. First, transpose the equations for P1(t) ... P4(t) to yield
P1(t) = G1^t M^t T^t P2(t) = G2^t M^t T^t P3(t) = G3^t M^t T^t P4(t) = G4^t M^t T^tNow, substitute these equations into our original equation for P(s):
P(s) = S M G = S M [ P1(t) ] [ P2(t) ] [ P3(t) ] [ P4(t) ] = S M [ G1^t M^t T^t ] [ G2^t M^t T^t ] [ G3^t M^t T^t ] [ G4^t M^t T^t ] = S M [ g11 g12 g13 g14 ] M^t T^t [ g21 g22 g23 g24 ] [ g31 g32 g33 g34 ] [ g41 g42 g43 g44 ] = S M G_tensor M^t T^tThis is known as a tensor product formulation of a surface. As for the parametric curves, it is really a vector equation, and can thus be written as three separate equations:
x(s,t) = S M G_x M^t T^t y(s,t) = S M G_y M^t T^t z(s,t) = S M G_z M^t T^t s,t in [0,1]Each of G_x, G_y, and G_z in the above equations is a 4x4 matrix of scalar values.
The isoparametric lines in the parameter space thus become isoparametric curves for the final surface. Each of the discretized set of points P(s,t) requires determining
[ x(s,t) ] P(s,t) = [ y(s,t) ] [ z(s,t) ]If the evaluations are carried out in a straightforward but inefficient manner, then converting a single patch to quadrilaterals will require 4/(delta_s*delta_t) evaluations of the function P(s,t). We can do better than this, however, if precompute some quantities. It is also possible to make use of the convex hull property for efficient clipping of bezier and b-spline patches.
x(s,t) = S M G M^t T^t
N = d/ds P(s,t) x d/dt P(s,t)