Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA...
Transcript of Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA...
![Page 1: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/1.jpg)
![Page 2: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/2.jpg)
Orientation Representation
Jim Van VerthNVIDIA Corporation
![Page 3: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/3.jpg)
Topics Covered
» What is orientation?» Various orientation representations» Why quaternions rock
![Page 4: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/4.jpg)
Orientation vs. Rotation
» Orientation is described relative to some reference frame
» A rotation changes object from one orientation to another
» Can represent orientation as a rotation from the reference frame
![Page 5: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/5.jpg)
Orientation vs. Rotation
» Analogy: think position and translation» Reference is origin» Can represent position x as translation y
from origin
O
xy
![Page 6: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/6.jpg)
Ideal Orientation Format
» Represent 3 degrees of freedom with minimum number of values
» Allow concatenations of rotations» Math should be simple and efficient
concatenationrotationinterpolation
![Page 7: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/7.jpg)
Interpolating Orientation
» Not as simple, but more important» E.g. camera control
Store orientations for camera, interpolate
» E.g. character animationBody location stored as pointJoints stored as rotations
» Need way to interpolate between orientations
![Page 8: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/8.jpg)
Interpolating Orientations
» Want: interpolated orientations generate equal intervals of angle as tincreases
![Page 9: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/9.jpg)
Linear Interpolation (Lerp)
» Just like position(1-t) p + t q
» ProblemCovers more arc in the middleI.e. rotates slower on the edges, faster in the middle
![Page 10: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/10.jpg)
Spherical Linear Interpolation
» The solution!» AKA slerp» Interpolating from p to q by a factor of t
» Problem: taking an orientation to a power is often not an easy – or cheap –operation
![Page 11: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/11.jpg)
Orientation Formats
» Matrices» Euler angles» Axis-Angle» Quaternions
![Page 12: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/12.jpg)
Matrices as Orientation
» Matrices just fine, right?» No…
9 values to interpolatedon’t interpolate well
![Page 13: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/13.jpg)
Interpolating Matrices
» Say we interpolate halfway between each element
» Result isn’t a rotation matrix!» Need Gram-Schmidt orthonormalization
![Page 14: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/14.jpg)
Interpolating Matrices
» Look at lerp diagram again» Orange vectors are basis vectors
» Get shorter in the middle!
![Page 15: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/15.jpg)
Interpolating Matrices
» Solution: do slerp?» Taking a matrix to a power is not cheap» Can do it by extracting axis-angle,
interpolating, and converting back» There are better ways
![Page 16: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/16.jpg)
Why Not Euler Angles?
» Three anglesHeading, pitch, roll
» HoweverDependant on coordinate systemNo easy concatenation of rotationsStill has interpolation problemsCan lead to gimbal lock
![Page 17: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/17.jpg)
Euler Angles vs. Fixed Angles
» One point of clarification» Euler angle - rotates around local axes» Fixed angle - rotates around world axes» Rotations are reversed
x-y-z Euler angles == z-y-x fixed angles
![Page 18: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/18.jpg)
Euler Angle Interpolation
» Example:Halfway between (0, 90, 0) & (90, 45, 90)Lerp directly, get (45, 67.5, 45)Desired result is (90, 22.5, 90)
» Can use Hermite curves to interpolateAssumes you have correct tangents
» AFAIK, slerp not even possible
![Page 19: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/19.jpg)
Euler Angle Concatenation
» Can't just add or multiply components» Best way:
Convert to matricesMultiply matricesExtract euler angles from resulting matrix
» Not cheap
![Page 20: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/20.jpg)
Gimbal Lock
» Euler/fixed angles not well-formed» Different values can give same rotation» Example with z-y-x fixed angles:
( 90, 90, 90 ) = ( 0, 90, 0 )
» Why? Rotation of 90° around y aligns xand z axes
» Rotation around z cancels x rotation
![Page 21: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/21.jpg)
Gimbal Lock
» Loss of one degree of freedom» Alignment of axes (e.g. rotate x into -z)
z
yxo
zz
yx
x´
o
» Any value of x rotation rotates cw around z axis
z
x y
x´
o
![Page 22: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/22.jpg)
Axis and Angle
» Specify vector, rotate ccw around it » Used to represent arbitrary rotation
orientation = rotation from reference
» Can interpolate, messy to concatenate
r
θ
![Page 23: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/23.jpg)
Axis and Angle
» Matrix conversion
where
![Page 24: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/24.jpg)
Quaternion
» Pre-cooked axis-angle format» 4 data members» Well-formed» (Reasonably) simple math
concatenationinterpolationrotation
![Page 25: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/25.jpg)
What is a Quaternion?
» Look at complex numbers first
» If normalized ( ), can use these to represent 2D rotation
![Page 26: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/26.jpg)
Reign on, Complex Plane
» Unit circle on complex plane
» Get
Im
Reθ
(cos θ, sin θ)
![Page 27: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/27.jpg)
Digression
» You may seen this:
» Falls out from
![Page 28: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/28.jpg)
What is a Quaternion?
» Created as extension to complex numbers
becomes
» Can rep as coordinates
» Or scalar/vector pair
![Page 29: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/29.jpg)
What is Rotation Quaternion?
» Normalize quat is rotation representation
also avoids f.p. drift
» To normalize, multiply by
![Page 30: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/30.jpg)
Why 4 values?
» One way to think of it:» 2D rotation ->
One degree of freedom
» Normalized complex number ->One degree of freedom
» 3D rotation ->Three degrees of freedom
» Normalized quaternion ->Three degrees of freedom
![Page 31: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/31.jpg)
What is Rotation Quaternion?
» Normalized quat (w, x, y, z)» w represents angle of rotation θ
w = cos(θ/2)
» x, y, z from normalized rotation axis r(x y z) = v = sin(θ/2)⋅r
» Often write as (w,v)» In other words, modified axis-angle
^^
![Page 32: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/32.jpg)
Creating Quaternion
» So for example, if want to rotate 90°around z-axis:
![Page 33: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/33.jpg)
Creating Quaternion
» Another exampleHave vector v1, want to rotate to v2
Need rotation vector r, angle θ
Plug into previous formula
v1
v2
r
θ
^
![Page 34: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/34.jpg)
Creating Quaternion
» From Game Gems 1 (Stan Melax)» Use trig identities to avoid arccos
Normalize v1, v2
Build quat
More stable when v1, v2 near parallel
![Page 35: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/35.jpg)
Multiplication
» Provides concatenation of rotations» Take q0 = (w0, v0) q1 = (w1, v1)
» If w0, w1 are zero:
» Non-commutative:
![Page 36: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/36.jpg)
Identity and Inverse
» Identity quaternion is (1, 0, 0, 0)applies no rotationremains at reference orientation
» q-1 is inverseq . q-1 gives identity quaternion
» Inverse is same axis but opposite angle
![Page 37: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/37.jpg)
Computing Inverse
» (w, v)-1 = ( cos(θ/2), sin(θ/2) . r )
» Only true if q is normalizedi.e. r is a unit vector
» Otherwise scale by
^
^^
^
![Page 38: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/38.jpg)
Vector Rotation
» Have vector p, quaternion q» Treat p as quaternion (0, p)» Rotation of p by q is q p q-1
» Vector p and quat (w, v) boils down to
assumes q is normalized
![Page 39: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/39.jpg)
Vector Rotation (cont’d)
» Why does q p q-1 work?» One way to think of it:
first multiply rotates halfway and into 4th dimensionsecond multiply rotates rest of the way, back into 3rd
» See references for more details
![Page 40: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/40.jpg)
Vector Rotation (cont’d)
» Can concatenate rotation
» Note multiplication order: right-to-left
q1 • (q0 • p • q0-1) • q1
-1 = (q1 • q0) • p • (q1 • q0)-1
Demo
![Page 41: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/41.jpg)
Vector Rotation (cont’d)
» q and –q rotate vector to same place» But not quite the same rotation» –q has axis –r, with angle 2π-θ» Causes problems with interpolation
r
-r
v
wθ2π−θ
![Page 42: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/42.jpg)
Quaternion Interpolation
» Recall: Want equal intervals of angle
![Page 43: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/43.jpg)
Linear Interpolation
» Familiar formula(1-t) p + t q
» Familiar problemsCuts across sphereMoves faster in the middle Resulting quaternions aren't normalized
![Page 44: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/44.jpg)
Spherical Linear Interpolation
» There is a (somewhat) nice formula for slerp:
where cos α = p • q
And p, q unit quaternions
![Page 45: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/45.jpg)
Faster Slerp
» Lerp is pretty close to slerp» Just varies in speed at middle» Idea: can correct using simple spline to
modify t (adjust speed)» From Jon Blow’s column, Game
Developer, March 2002» Near lerp speed w/slerp precision
![Page 46: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/46.jpg)
Faster Slerpfloat f = 1.0f - 0.7878088f*cosAlpha;
float k = 0.5069269f;
f *= f;
k *= f;
float b = 2*k;
float c = -3*k;
float d = 1 + k;
t = t*(b*t + c) + d;
![Page 47: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/47.jpg)
Faster Slerp
» Alternative technique presented by Thomas Busser in Feb 2004 Game Developer
» Approximate slerp with spline function» Very precise – but necessary? Not sure
![Page 48: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/48.jpg)
Which One?
» Technique used depends on data» Lerp generally good enough for motion
capture (lots of samples)Need to normalize afterwards
» Slerp only needed if data is sparseBlow’s method for simple interpolation(Also need to normalize)
» These days, Blow says just use lerp. YMMV.
Demo
![Page 49: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/49.jpg)
One Caveat
» Negative of normalized quat rotates vector to same place as original
(–axis, 2π–angle)
» If dot product of two interpolating quats is < 0, takes long route around sphere
» Solution, negate one quat, then interpolate
» Preprocess to save time
![Page 50: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/50.jpg)
Operation Wrap-Up
» Multiply to concatenate rotations» Addition only for interpolation (don’t
forget to normalize)» Be careful with scale
Quick rotation assumes unit quatDon’t do (0.5 • q) • pUse lerp or slerp with identity quaternion
![Page 51: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/51.jpg)
» Normalized quat converts to 3x3 matrix
Quaternion to Matrix
![Page 52: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/52.jpg)
Quats and Transforms
» Can store transform in familiar formVector t for translation (just add)Quat r for orientation (just multiply)Scalar s for uniform scale (just scale)
» Have point p, transformed point is
![Page 53: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/53.jpg)
Quats and Transforms (cont’d)
» Concatenation of transforms in this form
» Tricky part is to remember rotation and scale affect translations
Demo
![Page 54: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/54.jpg)
Summary
» Talked about orientation» Formats good for internal storage
MatricesQuaternions
» Formats good for UIEuler anglesAxis-angle
» Quaternions funky, but generally good
![Page 55: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/55.jpg)
References
» Shoemake, Ken, “Animation Rotation with Quaternion Curves,” SIGGRAPH ‘85, pp. 245-254.
» Shoemake, Ken, “Quaternion Calculus for Animation,” SIGGRAPH Course Notes, Math for SIGGRAPH, 1989.
» Hanson, Andrew J., Visualizing Quaternions, Morgan Kaufman, 2006.
» Van Verth, James M. and Lars M. Bishop, Essential Mathematics for Games and Interactive Applications, 2nd Edition, Morgan Kaufman, 2008.
![Page 56: Orientation Representation - GameDevs.org · Orientation Representation Jim Van Verth NVIDIA Corporation (jim@essentialmath.com)](https://reader033.fdocuments.us/reader033/viewer/2022060301/5f0855d17e708231d421801f/html5/thumbnails/56.jpg)
References
» Blow, Jonathan, “Hacking Quaternions,” Game Developer, March 2002.
» Busser, Thomas, “PolySlerp: A fast and accurate polynomial approximation of spherical linear interpolation (Slerp),” Game Developer, February 2004.
» Van Verth, Jim, “Vector Units and Quaternions,” GDC 2002. http://www.essentialmath.com