animating with quaternions

21
Rick Parent - CIS68 Animating with Quaternions en quaternion representations, interpolate through operations efficient with quaternion representatio Halfway between 2 quaternions Spherical Linear interpolation Cubic, interpolating

Upload: merton

Post on 12-Jan-2016

52 views

Category:

Documents


1 download

DESCRIPTION

Animating with Quaternions. Given quaternion representations, interpolate through them. Cubic, interpolating. Use operations efficient with quaternion representation. Halfway between 2 quaternions. Spherical Linear interpolation. Review of Quaternion Math. (cos( q /2),sin( q /2)*A). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Animating with Quaternions

Rick Parent - CIS681

Animating with Quaternions

Given quaternion representations, interpolate through them

Use operations efficient with quaternion representation

Halfway between 2 quaternions

Spherical Linear interpolation

Cubic, interpolating

Page 2: Animating with Quaternions

Rick Parent - CIS681

Review of Quaternion Math

(cos(/2),sin(/2)*A)

[s1,v1] * [s2,v2] = [s1*s2-v1.v2,s1*v2+s2*v1+v1Xv2]

q-1 = [-s,v]/||q||2

||q|| = sqrt(s*s + x*x + y*y + z*z)

[s1,v1] + [s2,v2] = [s1+s2,v1+v2]

Page 3: Animating with Quaternions

Rick Parent - CIS681

Rotation Matrix of a Unit Quaternion

1-2y2-2z2 2xy-2wz 2xz+2wy

1-2x2-2y22xz-2wy 2yz+2wx

1-2x2-2z22xy+2wz 2yz-2wx

[ w,x,y,z]

Page 4: Animating with Quaternions

Rick Parent - CIS681

Review of Quaternion Rotations

Rotq(v) = v’ = q * [0,v] * q-1 Rotq(v) = Rotk*q(v)

Rotqp(v) = Rotq(Rotp(v) )

Page 5: Animating with Quaternions

Rick Parent - CIS681

Quaternions as points on a 4D sphere

Unit quaternion: q=(s,x,y,z), ||q|| = 1

Want equal increment along arc connecting two quaternions on surface of sphere

spherical linear interpolation

Page 6: Animating with Quaternions

Rick Parent - CIS681

Linearly interpolate between quaternions

q=(sq,xq,yq,zq), p=(sp,xp,yp,zp)

q p

r() (1 )q p

Note: Simply adding quaternions gives mid-rotation(because a scalar multiple of a quaternion represents the same rotation, you don’t need to divide by 2 to get the ‘average’ rotation)

Rotr(

1

2)(v) Rotqp (v)

Page 7: Animating with Quaternions

Rick Parent - CIS681

Interpolation

Euler Angles: [x,y,z] = (1- )[xa,ya,za] + [xb,yb,zb]

K = (1-) A + BScalar: (linear interpolation: lerp)

Quaternions?: Linear interpolation of quaternion values would give unequal rotation increments - need to slerp (spherical linear interpolation)

Page 8: Animating with Quaternions

Rick Parent - CIS681

Quaternion : Power Operator

[ cos(/2), sin( /2) * A] [cos(/2), sin( /2) * A] =

q rotates to q orientation as goes from 0 to 1

Remember: q and -q represent same orientation

q and (-q) give different rotation sequences0< < gives short squence; < <2 gives long one

Since first term in q is cos(/2), q gives short sequence if first term is positive

Page 9: Animating with Quaternions

Rick Parent - CIS681

Quaternions as points on a 4D sphere

Remember: Rot[s,v] == Rot[-s,-v]

Use quaternion representations that are ‘close’ to each other:

Given quaternion p, should you interpolate to q or -q?

p and q are close if their 4D dot product is greater than zero.

Page 10: Animating with Quaternions

Rick Parent - CIS681

Interpolation of rotations

Euler Angles: [x,y,z] = (1-a)[xa,ya,za] + a[xb,yb,zb]

K = (1-) A + BScalar: (lerp)

Quaternions: q = (qbqa-1) qa (slerp)

q = slerp(qa,qb, )

Page 11: Animating with Quaternions

Rick Parent - CIS681

Review of Bezier Interpolation

P(u) = [u3 u2 u 1]

p0 p1 p2 p3

-1 1

1

3

3

33 3

-6

-3

-3 00

0 00

p0

p1

p2 p3

Using Catmull-Romm interp of interior control points

Page 12: Animating with Quaternions

Rick Parent - CIS681

Bezier Interpolation of Quaternions

Page 13: Animating with Quaternions

Rick Parent - CIS681

Interpolation Background

De Casteljau construction of Bezier curve

u=1/3

P(1/3)

Page 14: Animating with Quaternions

Rick Parent - CIS681

Interpolation Background

Easy to compute quaternion half-way point

u=1/2

P(1/2)

q1/2 = q0 + q01

Page 15: Animating with Quaternions

Rick Parent - CIS681

Quaternion - cubic interpolation

pn

pn-1

pn+1

pn+2

an+1

an

bn+1

1

Page 16: Animating with Quaternions

Rick Parent - CIS681

Quaternion Interpolation

Automatically generating interior (spherical) control points

P n-1

P n

P n+1

Q n

A n

Double the arc

Bisect the span

Page 17: Animating with Quaternions

Rick Parent - CIS681

Quaternion Interpolation

P n-1

P n

Q n Double(q1,q2) = q2q1-1q2

Q n =Double(P n-1, P n)

Page 18: Animating with Quaternions

Rick Parent - CIS681

Construct Midpoint

P n-1

P n

P n+1

Q n

A n Bisect(p,q) = (p+q)/||p+q||

A n =Bisect(Q n, P n+1)

q1 + q2 = [s1,x1,y1,z1] + [s2,x2,y2,z2]

Page 19: Animating with Quaternions

Rick Parent - CIS681

Spherical Linear Interpolation

p1 slerp(qn ,an, 13)

p2 slerp(an ,bn1, 13)

p3 slerp(bn1,qn1, 13)

p12 slerp(p1, p2, 13)

p23 slerp(p2, p3, 13)

p slerp(p12, p23, 13)

Page 20: Animating with Quaternions

Rick Parent - CIS681

Repeated mid-point interpolation

For u = 1/4

temp slerp(qn ,an, 12) qn an

p1 slerp(qn ,temp, 12) qn temp

temp slerp(an ,bn1, 12) an bn1

p2 slerp(qn , temp, 12) qn temp

temp slerp(bn1,qn1, 12) bn1 qn1

p3 slerp(bn1,temp, 12) bn1 temp

temp slerp(p1, p2, 12) p1 p2

p12 slerp(p1, temp, 12) p1 temp

temp slerp(p2, p3, 12) p2 p3

p23 slerp(p2,temp, 12) p2 temp

temp slerp(p12, p23, 12) p12 p23

p23 slerp(p12,temp, 12) p12 temp

Page 21: Animating with Quaternions

Rick Parent - CIS681

Quaternion Interpolation

Linearly interpolating between 4 keys

Cubic Bezier interpolation among same 4 keys

QuickTime™ and aVideo decompressor

are needed to see this picture.

QuickTime™ and aVideo decompressor

are needed to see this picture.