180 likes | 206 Views
Parametric Surfaces. Define points on the surface in terms of two parameters Simplest case: bilinear interpolation. s. x ( s,1 ). P 1,1. P 0,1. x ( s , t ). t. P 0,0. P 1,0. s. x ( s,0 ). Tensor Product Surface Patches. Defined over a rectangular domain
E N D
Parametric Surfaces • Define points on the surface in terms of two parameters • Simplest case: bilinear interpolation s x(s,1) P1,1 P0,1 x(s,t) t P0,0 P1,0 s x(s,0)
Tensor Product Surface Patches • Defined over a rectangular domain • Valid parameter values come from within a rectangular region in parameter space: 0s<1, 0t<1 • Use a rectangular grid of control points to specify the surface • 4 points in the bi-linear case, more in other cases • Surface takes the form:
Bezier Patches • As with Bezier curves, Bin(s) and Bjm(t) are the Bernstein polynomials of degree n and m respectively • Most frequently, use n=m=3: cubic Bezier patch • Need 4x4=16 control points, Pi,j
Bezier Patches (2) • Edge curves are Bezier curves • Any curve of constant s or t is a Bezier curve • One way to think about it: • Each row of 4 control points defines a Bezier curve in s • Evaluating each of these curves at the same s provides 4 virtual control points • The virtual control points define a Bezier curve in t • Evaluating this curve at t gives the point x(s,t) x(s,t)
Properties of Bezier Patches • The patch interpolates its corner points • Comes from the interpolation property of the underlying curves • The tangent plane at each corner interpolates the corner vertex and the two neighboring edge vertices • The tangent plane is the plane that is perpendicular to the normal vector at a point • The tangent plane property derives from the curve tangent properties and the way to compute normal vectors • The patch lies within the convex hull of its control vertices • The basis functions sum to one and are positive everywhere
Bezier Patch Matrix Form • Note that the 3 matrices stay the same if the control points do not change • The middle product can be pre-computed, leaving only:
Bezier Patch Meshes • A patch mesh is just many patches joined together along their edges • Patches meet along complete edges • Each patch must be rectangular OK OK Not OK Not OK
Bezier Mesh Continuity • Just like curves, the control points must satisfy rigid constraints to ensure parametric continuity • How do we ensure C0 continuity along an edge? • How do we ensure C1 continuity along an edge? • How do we ensure C2 continuity along an edge? • For geometric continuity, constraints are less rigid • What can you say about the vertices around a corner if there must be C1 continuity at the corner point?
Bezier Mesh Continuity • Just like curves, the control points must satisfy rigid constraints to ensure parametric continuity • C0 continuity along an edge? Share control points at the edge • C1 continuity along an edge? Control points across edge are collinear and equally spaced • C2 continuity along an edge? Constraints extent to points farther from the edge • For geometric continuity, constraints are less rigid • Still collinear for G1, but can be anywhere along the line • What can you say about the vertices around a corner if there must be C1 continuity at the corner point? • They are co-planar (not the interior points, just corner and edge)
Rendering Bezier Patches • Option 1: Evaluate at fixed set of parameter values and join up with triangles • Can’t use quadrilaterals because points may not be co-planar • Ideal situation for triangle strips • Advantage: Simple, and OpenGL has commands to do it for you • Disadvantage: No easy way to control quality of appearance • Option 2: Subdivide • Allows control of error in the triangle approximation • Defined much like curve subdivision, but done once in each parametric direction
Midpoint Subdivision • Repeatedly join midpoints to find new control vertices • Do it first for each row of original control points: 4x4 -> 4x7 • Then do it for each column of new control points:4x7 -> 7x7
A Potential Problem • One (good) way to subdivide, is: • If a control mesh is flat enough – draw it • Else, subdivide into 4 sub-patches and recurse on each • Problem: Neighboring patches may not be subdivided to the same level • Cracks can appear because join edges have different control meshes • This can be fixed by carefully shifting vertices around • Make more highly subdivided match less subdivided along edges Crack
Computing Normal Vectors • The partial derivative in the s direction is one tangent vector • The partial derivative in the t direction is another • Take their cross product, and normalize, to get the surface normal vector
B-spline Patches • Bi(s) and Bj(t) are the B-spline blending functions • Uniform B-spline patches use uniform knot vectors in each parametric direction
Evaluating B-spline Patches • Use the same trick as with curves: • All the blending functions are translations of each other • Find: a=floor(s), b=floor(t) • Compute: u=s-a, v=t-b • Use blending functions for [0,1) interval given in last lecture for B-spline curves
B-spline Patch Properties • Patch lies within convex hull of control vertices • Continuity is automatically C2 for uniform cubic B-splines • Interpolation can be forced by duplicating control vertices • Problem: Partial derivatives will vanish, resulting in undefined normal vectors • Solution: use normal from control polygon, or use normal from a nearby point on the surface • Interpolation and changing in continuity can be achieved with non-uniform B-splines • NURBS patches can also be defined • Definition follows directly from NURBS curves, but now all coordinates are functions of s,t
B-spline Patch Subdivision • We’ll look at this next lecture, in the context of subdivision surfaces