Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
B-Splines and OpenGL/GLU
The University of Texas at Austin
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
Spline Curves
Successive linear blend
Basis polynomials
Recursive evaluation
Properties
Joining segments
Tensor-product-patch Spline Surfaces
Tensor product patches
Recursive Evaluation
Properties
Joining patches
OpenGL and Glut Support
The University of Texas at Austin
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
Splines
If give up on small support, get natural splines; every control point influences the whole
curve.
If give up on interpolation, get cubic B-splines.
The University of Texas at Austin
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
B-Splines
Need only one basis function, all Bi(t) are obtained by shifts: Bi(t) = B(t i).
The basis function is piecewise polynomial:
B(t) =
4
1 3
t
+
2t
+
+
t
6
3
2
1 3
2
3 t 2t
The University of Texas at Austin
t 2
t 1
t0
2
3
t2 + 21 t3
t1
4
3
2t + t2 16 t3
t2
2t
4
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
B-Splines
The curve with control points p0 , p1, p2 , . . . pn is computed using
p(t) =
n
X
pi B(t i)
i=0
The allowed range of t is from 1 to n 1; outside this interval our functions do not sum up
to 1, which means in particular that if we move control points together in the same way, the
curve outside the interval will not move rigidly.
The University of Texas at Austin
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
B-Splines
The minimal number of points required is 4;
this corresponds to the interval for t of length 1.
This is inconvenient - but we can always add control points by reflection.
The University of Texas at Austin
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
B-Splines
Adding control points by reflection:
pn1
p1
pn
p0
reflected points
p1
p1 = 2p0 p1;
The University of Texas at Austin
pn+1
pn+1 = 2pn pn1
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
Drawing B-Splines
Hardware typically can draw only line segments. Need to approximate B-spline with piecewise
linear curve. Simplest approach:
Choose small t.
Compute points p(0), p(t), p(2t), . . .
Draw line segments connecting the points.
Not very efficient have to evaluate a cubic polynomial (or several) at each point.
Can do better using a magic algorithm (subdivision). Next lecture!
The University of Texas at Austin
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
Another Formulation: Discontinuities in B
ezier Splines
Bezier Discontinuities:
Two Bezier segments can be completely disjoint
Two segments join if they share last/first control point
P3
P1
P0
The University of Texas at Austin
P2
P4
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
Common Parameterization and Blending Functions
Joined curves can be given common parameterization
Parameterize first segment with 0 t < 1
Parameterize nest segment with 1 t 2, etc.
Look at blending/basis polynomials under this parameterization
Combine those for common Pj into a single piecewise polynomial
B0
B1
B2
B3
B4
The University of Texas at Austin
10
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
Combined Curve Segments
Curve is P (t) = P0B0(t) + P1B1(t) + P2B2(t) + P3B3(t) + P4B4(t), where
B0(t)
B1(t)
B2(t)
B3(t)
B4(t)
(1 t)2
0
2((1 t)t
0
t2
(2 t)2
0
2(2 t)(t 1)
0
(t 1)2
The University of Texas at Austin
0t<1
1t2
0t<1
1t2
0t<1
1t2
0t<1
1t2
0t<1
1t2
11
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
Curve Discontinuities from Basis Discontinuities
P2 is scaled by B2(t), which has a discontinuous derivative
The corner in the curve results from this discontinuity
B2
The University of Texas at Austin
12
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
Spline Continuity
Smoother Blending Functions:
Can B0(t), . . . , B4(t) be replaced by smoother functions?
Piecewise polynomials on 0 t 2
Continuous derivatives
Yes, but we lose one degree of freedom
Curve has no corner if segments share a common tangent
Tangent is given by the chords P1P2, P2 P3
An equation constrains P1 , P2, P3
P +P
P3 P2 = P2 P1 = P2 = 1 2 3
This equation leads to combinations:
1
1
P0B0(t) + P1 B1(t) + B2(t) + P3
B2(t) + B3(t) + P4B4(t)
2
2
The University of Texas at Austin
13
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
Spline Basis:
Combined functions form a smoother spline basis
B 0(t)
B 1(t)
B 2(t)
B3( t)
The University of Texas at Austin
B0(t)
1
B1(t) + B2(t)
2
1
B2(t) + B3(t)
2
B4(t)
14
Department of Computer Sciences
B0
The University of Texas at Austin
Graphics Spring 2013 (Lecture 11)
B2
B1
B0
15
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
Smoother Curves:
Control points used with this basis produce smoother curves.
P2
P1
P3
P0
General B-Splines:
Nonuniform B-splines (NUBS) generalize this construction
A B-spline, Bid(t), is a piecewise polynomial:
each of its segments is of degree d
it is defined for all t
its segmentation is given by knots t = t0 t1 tN
The University of Texas at Austin
16
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
it is zero for T < Ti and T > Ti+d+1
it may have a discontinuity in its d k + 1 derivative at tj {ti , . . . , ti+d+1}, if
tj has multiplicity k
it is nonnegative for ti < t < ti+d+1
Bid (t) + + Bi+d(t) = 1 for ti+d t < ti+d+1, and all other Bjd(t) are zero
on this interval
Bezier blending functions are the special case where all knots have multiplicity d + 1
The University of Texas at Austin
17
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
Example (Quadratic):
Bi
ti
t i+1
The University of Texas at Austin
Bi+1
t i+2
Bi+2
t i+3
t i+4
t i+5
18
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
Evaluation:
There is an efficient, recursive evaluation scheme for any curve point
It generalizes the triangle scheme (deCasteljau) for Bezier curves
Example (for cubics and ti+3 t < ti+4):
The University of Texas at Austin
19
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
3
Pi+3
2
Pi+2
t i+4- t
1
Pi+1
t i+4- t
Pi0
t i+4- t i+1
- t i+2
t i+4- t i+2
t i+4- t i+2
- t i+1
t i+4- t i+1
Pi
The University of Texas at Austin
t t i+4- t
t i+4- t i+3 t i+4-
Pi+1
t i+3
2
Pi+3
t i+5- t
1
Pi+2
t i+5- t
0
Pi+1
t i+3
t i+5- t i+2
t i+5- t i+3
- t i+2
t i+5- t i+2
- t i+3
t i+5- t i+3
1
P i+3
t i+6- t
0
Pi+2
Pi+2
t i+6- t i+3
- t i+3
t i+6- t i+3
0
Pi+3
Pi+3
20
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
Curves and Surfaces Programming using OpenGL and GLU
Quadrics support in GLU
Define a quadric object.
GLUquadricObj*p;
p=gluNewQuadric();
Specify a rendering Style of Quadric. Example as a wireframe.
gluQuadricDrawStyle(p,GLU_LINE);
Example a cylinder with its length along the y-axis
gluCylinder(p,BASE_RADIUS,BASE_RADIUS,BASE_HEIGHT,sample_circle,sample_height)
sample_circle = number of pieces of the base
sample_height = number of height pieces
The University of Texas at Austin
21
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
Bezier Curves and Surfaces
Support is available through 1D, 2D, 3D, 4D evaluators to compute values for the polynomials
used in Bezier and NURBS.
glMaplf(type,u_min,u_max,stride,order,point_array)
type = 3D points, 4D points, RGBA colors, normals, indexed colors,
1D to 4D texture coordinates
u_min <= parameter u
<=
u_max
stride = number of parameter values between curve segments
order = degree of polynomial + 1
control polygon = defined by point_array
Example an evaluator for a 3D cubic Bezier curve defined over (0,1) with a stride of 3 and
order 4
The University of Texas at Austin
22
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
point data[]={...}
glMaplf{GL_MAP_VERTEX_3,0.0,1.0, 3,4,data};
Multiple evaluators can be active at the same time, and can be used to evaluate curves,
normals, colors etc at the same time
To render the Bezier Curve over (0,1) with 100 line segments
glEnable{GL_MAP_VERTEX_3};
glBegin(GL_LINE_STRIP)
for(i=0; i<100; i++) glEvalCoord1f((float) i/100.0);
glEnd();
The GLUT library has the teapot as an object. See pg 646-648, Chap 12 for display/render
program a teapot using Bezier functions.
For lighting / shading using a NURBS surface, when additionally needs surface normals.
These could be generated automatically, using
glEnable(GL_AUTO_NORMAL)
The University of Texas at Austin
23
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
NURBS functions in GLU library
gluNewNurbsRenderer() - create a pointer to a NURBS object
gluNurbsProperty() - choose rendering values such as size of
lines, polygons. Also enables a mode where the tesselated geometry
can be retrieved through the callback interface
gluNurbsCallBack() - register the functions to call to retreive
the tesselated geometric data or if you wish notification when an
error is encountered
gluNurbsCurve() gluNurbsSurface() - to generate and render
-specify control points, knot sequence, order, and/or normals,
texture coordinates
The University of Texas at Austin
24
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
Teapot using B
ezier Patches: Wireframe Model
/* Enable evaluator */
glEnable( GL_MAP2_VERTEX_3 );
glColor3f( 1.0, 1.0, 1.0 );
glRotatef( -90.0, 1.0, 0.0, 0.0 );
glScalef( 0.25, 0.25, 0.25 );
/* Draw wireframe */
for ( k=0; k< 32; k++ )
{
glMap2f( GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4,
&data[ k ][ 0 ][ 0 ][ 0 ] );
for ( j = 0; j <= 4; j++ )
{
glBegin( GL_LINE_STRIP );
for ( i = 0; i <= 20; i++ )
glEvalCoord2f( ( GLfloat ) i / 20.0, ( GLfloat ) j / 4 );
glEnd( );
glBegin(GL_LINE_STRIP);
for ( i = 0; i <=20; i++ )
glEvalCoord2f( ( GLfloat ) j / 4.0, ( GLfloat ) i / 20 );
glEnd( );
}
}
The University of Texas at Austin
25
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
Teapot using B
ezier Patches: Solid Model
/* Enable evaluators */
glEnable( GL_MAP2_VERTEX_3 );
/* Set up light */
GLfloat light_position[ ] = { 1.0, 1.0, 1.0, 0 };
GLfloat light_ambient[ ] = { 0.2, 0.2, 0.2, 1.0 };
GLfloat light_diffuse[ ] = { 0.6, 0.6, 0.6, 1.0 };
glLightfv( GL_LIGHT0, GL_POSITION, light_position );
glLightfv( GL_LIGHT0, GL_AMBIENT, light_ambient );
glLightfv( GL_LIGHT0, GL_DIFFUSE, light_diffuse ) ;
glEnable( GL_LIGHTING ); glEnable( GL_LIGHT0 );
glEnable( GL_AUTO_NORMAL );
/* Set up material properties */
GLfloat mat_ambient[ ] = { 0.2, 0.2, 0.2, 1.0 };
GLfloat mat_specular[ ] = { 1, 1, 1, 1.0 };
GLfloat mat_diffuse[ ] = { 0.6, 0.6, 0.6, 1.0 };
glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient );
glMaterialfv( GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse );
glMaterialfv( GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular );
glMaterialf( GL_FRONT_AND_BACK, GL_SHININESS, 50.0 );
glRotatef( -90.0, 1.0,
0.0, 0.0 ); glScalef( 0.25, 0.25, 0.25 );
/* Draw solid model */
for ( k=0; k< 32; k++ ) {
glMapGrid2f( 8, 0.0, 1.0, 8, 0.0, 1.0 );
glEvalMesh2(
GL_FILL,
0, 8,
8 );
The University
of Texas
at 0,
Austin
}
26
Department of Computer Sciences
Graphics Spring 2013 (Lecture 11)
Reading Assignment and News
Before the next class please review Chapter 10 and its practice exercises, of the recommended
text. Also please see the midterm review questions.
(Recommended Text: Interactive Computer Graphics, by Edward Angel, Dave Shreiner, 6th
edition, Addison-Wesley)
Please track Blackboard for the most recent Announcements and Project postings related to
this course.
(http://www.cs.utexas.edu/users/bajaj/graphics2012/cs354/)
The University of Texas at Austin
27