Cubic Curves - Computer Graphics Laboratory at UCSD

Download Report

Transcript Cubic Curves - Computer Graphics Laboratory at UCSD

#7: Cubic Curves
CSE167: Computer Graphics
Instructor: Ronen Barzel
UCSD, Winter 2006
Outline for today



Inverses of Transforms
Curves overview
Bézier curves
1
Graphics pipeline transformations

Remember the series of transforms in the graphics pipe:





M - model: places object in world space
C - camera: places camera in world space
P - projection: from camera space to normalized view space
D - viewport: remaps to image coordinates
And remember about C:


handy for positioning the camera as a model
backwards for the pipeline:
• we need to get from world space to camera space

So we need to use C-1

You’ll need it for project 4: OpenGL wants you to load C-1 as the
base of the MODELVIEW stack
2
How do we get C-1?

Could construct C, and use a matrix-inverse routine




Would work.
But relatively slow.
And we didn’t give you one :)
Instead, let’s construct C-1 directly


based on how we constructed C
based on shortcuts and rules for affine transforms
3
Inverse of a translation

Translate back, i.e., negate the translation vector
1
0
T(v)  
0

0

0
1
0
0
0 vx 
0 vy 

1 vz 

0 1
1
0
1
T (v)  T(v)  
0

0
0
1
0
0
0 vx 
0 vy 

1 vz 

0 1 
Easy to verify:
1
0
T(v) T(v)  
0

0
0
1
0
0
0 vx   1 0 0 vx   1
0 vy   0 1 0 vy   0


1 vz   0 0 1 vz   0

 
0 1  0 0 0 1  0
0
1
0
0
0 vx  vx   1
0 vy  vy   0

1 vz  v z   0
 
0
1  0
0
1
0
0
0
0
1
0
0
0
I
0

1
4
Inverse of a scale

Scale by the inverses
 sx
0
S(sx , sy , sz )  
0

0

0
sy
0
0
0
0
sz
0
0
0

0

1
0
0
1 sx
 0 1s
0
y
1
1
1
1
S (sx , sy , sz )  S( s , s , s )  
x
y
z
 0
0 1 sz

0
0
 0
0
0

0

1
Easy to verify:
0
1 sx 0
 0 1s
0
y
1
1
1
S( s , s , s ) S(sx, sy, sz )  
x
y
z
 0
0 1 sz

0
0
 0
0   sx 0
0   0 sy

0  0 0

1  0 0
0
0
sz
0
0   sx sx
0
0
0  0
sy sy
0

0  0
0
sz sz
 
1  0
0
0
0  1
0  0

0  0
 
1  0
0
1
0
0
0
0
1
0
0
0
I
0

1
5
Inverse of a rotation

Rotate about the same axis, with the oppose angle:
R 1 (a, )  R(a,  )
For example:
 cos( )  sin( )
 sin( ) cos( )
R z ( )  
 0
0

0
 0
0 0
0 0

1 0

0 1
 cos( )  sin( )
sin( ) cos( )
1
R z ( )  R z ( )  
 0
0

0
 0

0 0   cos( ) sin( )
0 0    sin( ) cos( )
 
1 0  0
0
 
0 1  0
0
0 0
0 0
  R Tz ( )
1 0

0 1
Inverse of a rotation is the transpose:
R1 (a, )  RT (a, )
•
•
•
•
Columns of a rotation matrix are orthonormal
ATA produces all columns’ dot-product combinations as matrix
Dot product of a column with itself = 1 (on the diagonal)
Dot product of a column with any other column = 0 (off the diagonal)
6
Inverses of composition

If you have a series of transforms composed together
M A B C D
To invert, compose inverses in the reverse order
M 1  D1 C1 B1 A 1
Easy to verify:
M 1 M  (D1 C1 B1 A 1 )(A B C D)
 D1 C1 B1 A 1 A B C D
I
 D1 C1 B1 B C D
I
 D1 C1 C D
I
 D1 D
I
7
Composing with inverses, pictorially
QuickTime™ and a
TIFF (LZW) decompressor
are needed to see this picture.

To go from one space to another, compose along arrows

Backwards along arrow: use inverse transform
Lamp in world coords  M table1 M top1 Mlamp
1
Plant in Tabletop1 coords  M 1
top1 M table1 M table2 M top2 Mplant
8
Model-to-Camera transform
r
a
s so
a nd p re
e™ co m e.
Tim de pic tur
ick ed )
Q u r ess ee this
p
s
m
n co ed to
F ( U eed
TIF ar e n
Camera-to-world
C
Model-to-Camera = C-1M
y
QuickTime™ and a
TIFF (LZW) decompressor
are needed to see this picture.
x
Quick Time™ a nd a
TIFF ( Un compr ess ed ) de co mp res sor
ar e n eed ed to s ee this pic tur e.
z
Camera Space
9
The look-at transformation

Remember, we constructed C using the look-at idiom:
Given: eye point e, target point t, and up vector u
Construct: columns of camera matrix C
de
et
c
et
a
uc
uc
bca
Important: a, b, c are orthonormal
10
C-1 from a,b,c,d columns
 If we construct a transform using a, b, c, d columns, it's the same as a composition.
 First rotate/scale using a, b, c, then translate by d:
 ax bx cx d x   1 0 0 d x   ax bx cx 0 
a b c d  0 1 0 d  a b c 0 
y
y
y
y
y y
y
y
  T(d) M
C

 az bz cz dz   0 0 1 dz   az bz cz 0 

 


 0 0 0 1  0 0 0 1   0 0 0 1 
 If a, b, c are orthonormal, they define a pure rotation:
C  T(d) R
 To take the inverse:

C 1  T(d) R

1
 R 1 T 1 (d)
C 1  RT T(d)
 ax ay az 0   1 0 0 d x 
 b b b 0   0 1 0 d 
x
y
z
y
1

C 
 cx cy cz 0   0 0 1 dz 



 0 0 0 1  0 0 0 1 
 Build RT using a, b, c as rows, build T(d), compose them
 Notice, this does the translation first, then the rotation.
Exercise: what does the final matrix look like?
11
Outline for today



Inverses of Transforms
Curves overview
Bézier curves
12
Usefulness of curves in modeling

Surface of revolution
13
Usefulness of curves in modeling

Extruded/swept surfaces
14
Usefulness of curves in modeling

Surface patches
QuickTime™ and a
TIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and a
TIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and a
TIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and a
TIFF (Uncompressed) decompressor
are needed to see this picture.
15
Usefulness of curves in animation

Provide a “track” for objects
http://www.f-lohmueller.de/
16
Usefulness of curves in animation

Specify parameter values over time: 2D curve edtior
17
How to represent curves

Specify every point along a curve?




Used sometimes as “freehand drawing mode” in 2D applications
Hard to get precise results
Too much data, too hard to work with generally
Specify a curve using a small number of “control points”

Known as a spline curve or just spline
18
Interpolating Splines



Specify points, the curve goes through all the points
Seems most intuitive
Surprisingly, not usually the best choice.

Hard to predict behavior
• Overshoots
• Wiggles

Hard to get “nice-looking” curves
19
Approximating Splines

“Influenced” by control points but not necessarily go through them.
QuickTime™ and a
TIFF (Uncompressed) decompressor
are needed to see this picture.

Various types & techniques


Most common: (Piecewise) Polynomial Functions
Most common of those:
• Bézier
• B-spline


Each has good properties
We’ll focus on Bézier splines
20
What is a curve, anyway?


We draw it, think of it as a thing existing in space
But mathematically we treat it as a function, x(t)


Given a value of t, computes a point x
Can think of the function as moving a point along the curve
x(t)
z
y
y
x(0.0)
x(0.5)
x(1.0)
x
21
The tangent to the curve

Vector points in the direction of movement

(Length is the speed in the direction of movement)

Also a function of t, written x(t) or
d
dt
x(t) or
dx
(t)
dt
x(t)
z
y
y
x’(0.0)
x’(0.5)
x’(1.0)
x
22
Polynomial Functions

Linear:
(1st order)

Quadratic:
f t   at  b
f t   at 2  bt  c
(2nd order)

Cubic:
f t   at 3  bt 2  ct  d
(3rd order)
23
Point-valued Polynomials (Curves)

Linear:
(1st

order)
Quadratic:
(2nd order)

Cubic:
(3rd order)

x t   at 2  bt  c
x t   at 3  bt 2  ct  d
Each is 3 polynomials “in parallel”:
xx (t)  axt  bx

x t   at  b
xy (t)  ayt  by
xz (t)  azt  bz
We usually define the curve for 0 ≤ t ≤ 1
24
How much do you need to specify?

Two points define a line (1st order)
Three points define a quadratic curve (2nd order)
Four points define a cubic curve (3rd order)
k+1 points define a k-order curve

Let’s start with a line…



25
Linear Interpolation

Linear interpolation, AKA Lerp



Generates a value that is somewhere in between two other values
A ‘value’ could be a number, vector, color, …
Consider interpolating between two points p0 and p1 by some parameter t




This defines a “curve” that is straight. AKA a first-order spline
When t=0, we get p0
When t=1 we get p1
When t=0.5 we get the midpoint
p1
.
p0
.
0<t<1
t=1
t=0
x(t)  Lerp t, p0 , p1   1 t p0  t p1
26
Linear interpolation

We can write this in three ways



All exactly the same equation
Just different ways of looking at it
Different properties become apparent
• As a weighted average of the control points:
x(t)  (1  t)p 0  (t)p1
• As a polynomial in t :
x(t)  (p1  p 0 )t  p 0
• In a matrix form :
x(t)  p 0
 1 1   t 
p1 
 1
1
0

 
27
Linear interpolation as weighted average
x(t)  (1  t)p 0  (t)p1
 B0 (t) p 0  B1 (t)p1, where B0 (t)  1  t and B1 (t)  t

Each weight is a function of t


The sum of the weights is always 1, for any value of t
Also known as blending functions
B0 (t)
B1 (t)
QuickTime™ and a
TIFF (Uncompressed) decompressor
are needed to see this picture.
28
Linear interpolation as polynomial
x(t)  (p1  p 0 ) t 
vector


p0
point
Curve is based at point p0
Add the vector, scaled by t
.
p0
.
p1 - p0
.
.5(p1-p0)
29
Linear interpolation in matrix form
 1 1   t 
x(t)  p 0 p1 
   G B T
 1 0  1
where:
G  p 0 p1  is the "Geometry matrix"
 1 1 
B
 is the "Geometric Basis"
 1 0
t 
T  
is the "Polynomial basis"
1
 Actually, this is shorthand for separate equations for x, y, z
 1 1   t 
 1 1   t 
 1 1   t 
xx (t)  p0 x p1x 
x y (t)   p0 y p1y  
xz (t)   p0 z p1z  






 
 1 0  1
 1 0  1
 1 0  1
 Or it can really be put into one matrix
 p0 x p1x 

  1 1   t 
x(t)   p0 y p1y  
1 0  1

 p0 z p1z 
30
Linear Interpolation: tangent

For a straight line, the tangent is constant
x(t)  p1  p 0
• As a weighted average of the control points:
x(t)  (1)p 0  (1)p1
• As a (trivial, zero-order) polynomial in t :
x(t)  0t  (p1  p 0 )
• In a matrix form :
x(t)  p 0
 1 1   1 
p1 
 
 1 0  0 
31
Outline for today



Inverses of Transforms
Curves overview
Bézier curves
32
Bézier Curves

Can be thought of as a higher order extension of linear
interpolation
p1
p1
p1
p2
p3
p0
Linear
p0
Quadratic
p0
p2
Cubic
33
Cubic Bézier Curve

Most common case





Many demo applets online





4 points for a cubic Bézier
Interpolates the endpoints
Midpoints are “handles” that control the tangent at the endpoints
Easy and intuitive to use
http://www.cs.unc.edu/~mantler/research/bezier/
http://www.theparticle.com/applets/nyu/BezierApplet/
http://www.sunsite.ubc.ca/LivingMathematics/V001N01/UBCExamples/Bezier/bezier.html
Convex Hull property
Variation-diminishing property
34
Bézier Curve Formulation

Ways to formulate Bézier curves, analogous to linear:



Weighted average of control points -- weights are Bernstein polynomials
Cubic polynomial function of t
Matrix form

Also, the de Casteljau algorithm: recursive linear interpolations

Aside: Many of the original CG techniques were developed for
Computer Aided Design and manufacturing.



Before games, before movies, CAD/CAM was the big application for CG.
Pierre Bézier worked for Peugot, developed curves in 1962
Paul de Casteljau worked for Citroen, developed the curves in 1959
35
Bézier Curve

Find the point x on the
curve as a function of
parameter t:
p1
p0
•
x(t)
p2
p3
36
de Casteljau Algorithm

A recursive series of linear interpolations


Not terribly efficient to evaluate this way


Works for any order. We’ll do cubic
Other forms more commonly used
So why study it?



Kinda neat
Intuition about the geometry
Useful for subdivision (later today)
37
de Casteljau Algorithm
p1


Start with the control points
And given a value of t

p0
p2
In the drawings, t≈0.25
p3
38
de Casteljau Algorithm
p1
q1
q0 (t)  Lerp t,p 0 , p1 
q1 (t)  Lerp t, p1 , p 2 
q0
p0
p2
q2 (t)  Lerp t,p 2 , p 3 
q2
p3
39
de Casteljau Algorithm
q0
r0 (t)  Lerp t, q 0 (t), q1 (t)
r1 (t)  Lerp t, q1 (t), q 2 (t)
r0
q1
r1
q2
40
de Casteljau Algorithm
r0
x(t)  Lerp t,r0 (t),r1 (t)
•
x
r1
41
de Casteljau algorihm
p1
•
p0
x
p2

Applets


http://www2.mat.dtu.dk/people/J.Gravesen/cagd/decast.html
http://www.caffeineowl.com/graphics/2d/vectorial/bezierintro.html
p3
42
Recursive Linear Interpolation
x  Lerp t,r0 ,r1 
p0
q 0  Lerp t, p 0 , p1 
r0  Lerp t, q 0 , q1 
p1
r1  Lerp t, q1 , q 2 
q1  Lerp t, p1 , p 2 
p2
q 2  Lerp t, p 2 , p 3 
p3
p1
q0
r0
x
p2
q1
r1
p3
q2
p4
43
Expand the Lerps
q 0 (t)  Lerp t, p 0 , p1   1  t p 0  tp1
q1 (t)  Lerp t, p1 , p 2   1  t p1  tp 2
q 2 (t)  Lerp t, p 2 , p 3   1  t p 2  tp 3
r0 (t)  Lerp t, q 0 (t), q1 (t)  1  t 1  t p 0  tp1  t 1  t p1  tp 2 
r1 (t)  Lerp t, q1 (t), q2 (t)  1  t 1  t p1  tp 2  t 1  t p 2  tp 3 
x(t)  Lerp t, r0 (t), r1 (t)

t 1  t 1  t p

 tp 
 1  t  1  t 1  t p 0  tp1  t 1  t p1  tp 2 
1
 tp 2  t 1  t p 2
3
44
Weighted average of control points

Group this as a weighted average of the points:
x(t)  1  t 1  t 1  t p 0  tp1  t 1  t p1  tp 2 


t 1  t 1  t p1  tp 2  t 1  t p 2  tp 3 
x(t)  1  t  p 0  31  t  tp1  31  t t 2 p 2  t 3p 3
3

 3t
2
B0 (t )
 
p  t p
B1 (t )

x(t)  t 3  3t 2  3t  1 p 0  3t 3  6t 2  3t p1
3
 3t 2
B2 (t )
3
2
3
B3 (t )
45
Bézier using Bernstein
Polynomials
x(t)  B0 t p 0  B1 t p1  B2 t p 2  B3 t p 3
The cubic Bernstein polynomials :
B0 t   t 3  3t 2  3t  1
B1 t   3t 3  6t 2  3t
B2 t   3t 3  3t 2
B3 t   t 3
B0 (t)QuickTime™
B1 (t) B
2 (t)
and
a
B3 (t)
TIFF (Uncompressed) decompressor
are needed to see this picture.
 B (t)  1
i

Notice:


Weights always add to 1
B0 and B3 go to 1 -- interpolating the endpoints
46
General Bernstein Polynomials
B01 t   t  1
B11 t   t
B02 t   t 2  2t  1
B12 t   2t 2  2t
B22 t   t 2
QuickTime™ and a
TIFF (Uncompressed) decompressor
are needed to see this picture.
B03 t   t 3  3t 2  3t  1
B13 t   3t 3  6t 2  3t
B23 t   3t 3  3t 2
B33 t   t 3
QuickTime™ and a
TIFF (Uncompressed) decompressor
are needed to see this picture.
Quic kTime™ and a
TIFF ( Unc ompres s ed) dec ompres sor
are needed to s ee this pic tur e.
 n
ni
i
B t     1  t  t 
 i
n
i
 n
n!
 i   i!n  i !
 B t   1
n
i
47
General Bézier using Bernstein Polynomials

Bernstein polynomial form of an nth-order Bézier curve:
 n
n i
i
B t     1  t  t 
 i
n
i
n
x t    Bin t p i
i0
48
Convex Hull Property

Construct a convex polygon around a set of points


Any weighted average of the points, with the weights all between 0 and 1:



The convex hull of the control points
Known as a convex combination of the points
Result always lies within the convex hull (including on the border)
Bézier curve is a convex combination of the control points


Curve is always inside the convex hull
Very important property!
•
•
•
•
Makes curve predictable
Allows culling
Allows intersection testing
Allows adaptive tessellation
p0
p3
p1
p2
49
Cubic Equation Form
Start with Bernstein form:







x(t)  t 3  3t 2  3t  1 p 0  3t 3  6t 2  3t p1  3t 3  3t 2 p 2  t 3 p 3
Regroup into coefficients of t :
x(t)  p 0  3p1  3p 2  p 3 t 3  3p 0  6p1  3p 2 t 2  3p 0  3p1 t  p 0 1
a  p 0  3p1  3p 2  p 3 
x(t)  at  bt  ct  d
3
2
b  3p 0  6p1  3p 2 
c  3p 0  3p1 
d  p 0 


Good for fast evaluation: precompute constant coefficients (a,b,c,d)
Doesn’t give much geometric intuition

But the geometry can be extracted from the coefficients
50
Aside: linear combinations of points

Reminder: we can’t scale a point or add two points



Can subtract two points
Can take weighted average of points if the weights add up to one
Act on homogeneous points: w component of result must be 1
 
   
.25    .75     
1
1 1

OK point
Can also take weighted average of points if the weights add up to 0



The result gives w=0, i.e. a vector
E.g. p-q is the same as (+1)p + (-1)q
Can also do (-1)p0+(3)p1+(-3)p2+(1)p3
 
 
     
1    3    3    1     
1
1
1 1 0 
OK vector
51
Cubic Equation, vector notation
a  p 0  3p1  3p 2  p 3 
x(t)  at  bt  ct  d
3
2
b  3p 0  6p1  3p 2 
c  3p 0  3p1 
d  p 0 
 Curve is based at p 0 AKA d
 Increasing t introduces the other vectors:
first order: c
-- moves towards p1
second order: b -- subtracts off c, pulls towards p 2
third order: a
-- substracts off everything, moves towards p 3
52
Cubic Matrix Form
t 3 
 2
t 

x(t)   a b c d 
t 
 
1
x(t)  p 0
p1
p2
G Bez

a  p 0  3p1  3p 2  p 3 
b  3p 0  6p1  3p 2 
c  3p 0  3p1 
d  p 0 
 1 3 3
 3 6 3
p 3 
 3 3 0

1 0 0
B Bez
1  t 3 
0  t 2 

0  t 
 
0  1 
T
Other cubic splines use different basis matrix B

Hermite, Catmull-Rom, B-Spline, …
53
Cubic Matrix Form

3 parallel equations, in x, y and z:
x x (t)  p0 x
p1x
p2 x
x y (t)   p0 y
p1y
p2 y
x z (t)   p0 z
p1z
p2 z
 1 3 3 1   t 3 
 3 6 3 0   t 2 
 
p3x 
 3 3 0 0   t 

 
1
0
0
0

1 
 1 3 3 1   t 3 
 3 6 3 0   t 2 
 
p3y  
 3 3 0 0   t 

 
1
0
0
0

1 
 1 3 3 1   t 3 
 3 6 3 0  t 2 
 
p3z  
 3 3 0 0   t 

 
1
0
0
0

1 
54
Matrix Form

Bundle into a single matrix
 p0 x

x(t)   p0 y
 p0 z
p1x
p1y
p2 x
p2 y
p1z
p2 z
 1 3 3 1   t 3 
p3x  
 2
  3 6 3 0  t 
p3y 
 3 3 0 0   t 
p3z  
 
1
0
0
0

1 
x(t)  G Bez B Bez T
x(t)  C T

Evaluate quickly:


Precompute C
Take advantage of existing 4x4 matrix hardware support
55
Tangent

The derivative of a curve represents the tangent vector to
the curve at some point
dx
t 
dt
x t 
56
Tangent


Computing the tangent of a polynomial curve is easy:
dx
(t)  3at 2  2bt  c
dt
x(t)  at 3  bt 2  ct  d
x(t) 
t 3 
 2
t 

x(t)   a b c d 
t 
 
1
 3t 2 
 
2t 
dx

x(t) 
(t)   a b c d 
 1 
dt
 
 0 
Notice x’(t) is a vector


Doesn’t depend on d
Doesn’t depend on position of curve
57
Transforming Bézier curves

Two ways to transform a Bézier curve



Transform the control points, then compute resulting spline point
Compute spline point, then transform it
Either way, get the same point!



Curve is defined via affine combination of points
Invariant under affine transformations
Convex hull property always remains
58
Drawing Bézier Curves

How can you draw a curve?



Generally no low-level support for drawing curves
Can only draw line segments or individual pixels
Approximate the curve as a series of line segments


Analogous to tessellation of a surface
Methods:
• Sample uniformly
• Sample adaptively
• Recursive Subdivision
59
Uniform Sampling

Approximate curve with N straight segments


N chosen in advance
i
Evaluate xi  x ti  where ti  for i  0, 1, , N
N
i3
i2
i
xi  a 3  b 2  c  d
N
N
N
x(t)
x4
x2


Too few points?



Connect the points with lines
x1
x3
x0
Bad approximation
“Curve” is faceted
Too many points?


Slow to draw too many line segments
Segments may draw on top of each other
60
Adaptive Sampling

Use only as many line segments as you need



Fewer segments needed where curve is mostly flat
More segments needed where curve bends
No need to track bends that are smaller than a pixel
x(t)

Various schemes for sampling,
checking results, deciding whether
to sample more

Or, use knowledge of curve structure:

Adapt by recursive subdivision
61
Recursive Subdivision



Any cubic curve segment can be expressed as a Bézier curve
Any piece of a cubic curve is itself a cubic curve
Therefore:


Any Bézier curve can be broken up into smaller Bézier curves
But how…?
62
de Casteljau subdivision
p1
q0
r0
p0
x
r1
p2

de Casteljau construction points
are the control points of two Bézier
sub-segments
q2
p3
63
Adaptive subdivision algorithm:


Use de Casteljau construction to split Bézier segment
Examine each half:



If flat enough: draw line segment
Else: recurse
To test if curve is flat enough

Only need to test if hull is flat enough
• Curve is guaranteed to lie within the hull

e.g., test how far the handles are from a straight segment
• If it’s about a pixel, the hull is flat
64
Done

Next class:


Extending to longer curves
Extending to curved surfaces
65