Curves and Surfaces
Limitations of Polygonal Meshes planar facets
Some Non-Polygonal Modeling Tools Extrusion Surface of Revolution Spline Surfaces/Patches Quadrics and other implicit polynomials
Continuity definitions: C0 continuous curve/surface has no breaks/gaps/holes "watertight" C1 continuous curve/surface derivative is continuous "looks smooth, no facets" C2 continuous curve/surface 2nd derivative is continuous Actually important for shading
Splines... Classic problem: How to draw smooth curves? Spline curve: smooth curve that is defined by a sequence of points Requirements: … H&B 8-8:420-425
Splines 1 Spline curve: smooth curve that is defined by a sequence of points Approximating spline Interpolating spline H&B 8-8:420-425
Splines 2 Convex hull: Smallest polygon that encloses all points Approximating spline Interpolating spline H&B 8-8:420-425
Splines 3 Control graph: polyline through sequence of points Approximating spline Interpolating spline H&B 8-8:420-425
Splines 4 Splines in computer graphics: Piecewise cubic splines Segments H&B 8-8:420-425
Splines 5 Segments have to match ‘nicely’. Given two segments P(u) en Q(v). We consider the transition of P(1) to Q(0). Zero-order parametric continuity C0: P(1) = Q(0). Endpoint of P(u) coincides with startpoint Q(v). P(u) Q(v) H&B 8-8:420-425
Splines 6 Segments have to match ‘nicely’. Given two segments P(u) en Q(v). We consider the transition of P(1) to Q(0). First order parametric continuity C1: dP(1)/du = dQ(0)/dv. Direction of P(1) coincides with direction of Q(0). P(u) Q(v) H&B 8-8:420-425
Splines 7 First order parametric continuity gives a smooth curve. Sometimes good enough, sometimes not. line segment circle arc Suppose that you are bicycling over the curve. What to do with the steering rod at the transition? Turn around! Discontinuity in the curvature! H&B 8-8:420-425
Splines 8 Given two segments P(u) and Q(v). We consider the transition of P(1) to Q(0). Second order parametric continuity C2: d2P(1)/du2 = d2Q(0)/dv2. Curvatures in P(1) and Q(0) are equal. P(u) Q(v) H&B 8-8:420-425
Splines 9 So far: considered parametric continuity. Here the vectors are exactly equal. It suffices to require that the directions are the same: geometric continuity. Q(v) P(u) Q(v) P(u) H&B 8-8:420-425
Splines 10 Given two segments P(u) en Q(v). We consider the transition of P(1) to Q(0). First order geometric continuity: G1: dP(1)/du = dQ(0)/dv with >0. Direction of P(1) coincides with direction Q(0). P(u) Q(v) H&B 8-8:420-425
Representation cubic spline 1 H&B 8-8:420-425 U: Powers of u C: Coefficient matrix
Representation cubic spline 2 Control points or Control vectors H&B 8-8:420-425 Matrix Mspline :’translates’ geometric info to coefficients
Representation cubic spline 3 H&B 8-8:420-425
Representation cubic spline 4 H&B 8-8:420-425
Representatie cubic spline 5 Puzzle: Describe a line segment between the points P0 en P1 with those three variants. P1 u=1 P0 u u=0 H&B 8-8:420-425
Representation cubic spline 6 H&B 8-8:420-425
Representation cubic spline 7 H&B 8-8:420-425
Representation cubic spline 8 H&B 8-8:420-425
Spline surface 1 P33 P03 P30 P20 P10 H&B 8-8:420-425 P00
Spline surface 2 H&B 8-8:420-425
Spline surface 2 P33 P03 P30 P20 P10 H&B 8-8:420-425 P00
Spline surface 3 v u H&B 8-8:420-425
Spline surface 4 v du := 1/nu; // nu: #facets u-direction u dv := 1/nv; // nv: #facets v-direction for i := 0 to nu1 do u := i*du; for j := 0 to nv 1 do v := j*dv; DrawQuad(P(u,v), P(u+du, v), P(u+du, v+dv), P(u, v+dv)) u H&B 8-8:420-425
Spline surface 5 // Alternative: calculate points first for i := 0 to nu do for j := 0 to nv do Q[i, j] := P(i/nu, j/nv); for i := 0 to nu 1 do for j := 0 to nv 1 do DrawQuad(Q[i, j], Q[i+1, j], Q[i+1, j+1], Q[i, j+1]) v u H&B 8-8:420-425
Spline surface 6 // Alternative: calculate points first, // triangle version for i := 0 to nu do for j := 0 to nv do Q[i, j] := P(i/nu, j/nv); for i := 0 to nu 1 do for j := 0 to nv 1 do DrawTriangle(Q[i, j], Q[i+1, j], Q[i+1, j+1]); DrawTriangle(Q[i, j], Q[i+1, j+1], Q[i, j+1]); v u H&B 8-8:420-425
Spline surface 7 // Alternative: calculate points first, // triangle variant, triangle strip for i := 0 to nu do for j := 0 to nv do Q[i, j] := P(i/nu, j/nv); for i := 0 to nu 1 do glBegin(GL_TRIANGLE_STRIP); for j := 0 to nv 1 do glVertex(Q[i, j]); glVertex(Q[i, j+1]); glEnd; v u H&B 8-8:420-425
Bézier spline curves 1 H&B 8-10:432-441
Bézier spline curves 2 P1 P0 H&B 8-10:432-441
Bézier spline curves 3 P1 P2 P0 H&B 8-10:432-441
Bézier spline curves 4 P2 P3 P1 P0 H&B 8-10:432-441
Bézier spline curves 5 P2 P3 P1 P0 H&B 8-10:432-441
Bézier spline curves 6 P2 P3 P1 P0 H&B 8-10:432-441
Bézier spline curves 7 P2 P3 P1 P0 H&B 8-10:432-441
Bézier spline curves 8 P2 P3 Q1 P1 Q0 Q2 Q3 P0 H&B 8-10:432-441
Bézier spline curves 8 P2 P3 Q1 P1 Q0 Q2 Q3 P0 H&B 8-10:432-441
Bézier spline curves 9 P2 P3 Q1 P1 Q0 Q2 Q3 P0 H&B 8-10:432-441
Bézier spline curves 9 P2 P3 P1 Q1 Q0 Q2 Q3 P0 H&B 8-10:432-441
Bézier spline curves 10 H&B 8-10:432-441
Bézier surface 1 P33 P03 P30 P20 P10 P00 H&B 8-10:432-441
Bézier surface 2 P33 P30 Q33 P03 P00 Q30 Q03 H&B 8-10:432-441 Q00
Bézier surface 2 P33 P30 Q33 P03 P00 Q03 Q30 H&B 8-10:432-441 Q00
Bézier surface 3 P33 P30 P03 P00 Q30 H&B 8-10:432-441 Q00
Bézier surface 3 P33 P30 P03 P00 Q30 H&B 8-10:432-441 Q00
Bézier surface 3 P33 P30 P03 P00 Q30 H&B 8-10:432-441 Q00