CS 445/645 Fall 2001 Parameterized Rotations & Curves Parameterizing Rotations • Straightforward in 2D – A scalar, q, represents rotation in plane • More complicated.
Download ReportTranscript CS 445/645 Fall 2001 Parameterized Rotations & Curves Parameterizing Rotations • Straightforward in 2D – A scalar, q, represents rotation in plane • More complicated.
CS 445/645 Fall 2001 Parameterized Rotations & Curves Parameterizing Rotations • Straightforward in 2D – A scalar, q, represents rotation in plane • More complicated in 3D – Three scalars are required to define orientation – Note that three scalars are also required to define position – Objects free to translate and tumble in 3D have 6 degrees of freedom (DOF) Representing 3 Rotational DOFs • 3x3 Matrix (9 DOFs) – Rows of matrix define orthogonal axes • Euler Angles (3 DOFs) – Rot x + Rot y + Rot z • Axis-angle (4 DOFs) – Axis of rotation + Rotation amount • Quaternion (4 DOFs) – 4 dimensional complex numbers Rotation Matrix • • • • 9 DOFs must reduce to 3 Rows must be unit length (-3 DOFs) Rows must be orthogonal (-3 DOFs) Drifting matrices is very bad – Numerical errors results when trying to gradually rotate matrix by adding derivatives – Resulting matrix may scale / shear – Gram-Schmidt algorithm will re-orthogonalize your matrix • Difficult to interpolate between matrices Euler Angles • (qx, qy, qz) = RzRyRx – Rotate qx degrees about x-axis – Rotate qy degrees about y-axis – Rotate qz degrees about z-axis • Axis order is not defined – (y, z, x), (x, z, y), (z, y, x)… are all legal – Pick one Euler Angles • Rotations not uniquely defined – ex: (z, x, y) = (90, 45, 45) = (45, 0, -45) takes positive x-axis to (1, 1, 1) – cartesian coordinates are independent of one another, but Euler angles are not • Gimbal Lock – Term derived from mechanical problem that arises in gimbal mechanism that supports a compass or a gyro Gimbal Lock Gimbal Lock • Occurs when two axes are aligned • Second and third rotations have effect of transforming earlier rotations – ex: Rot x, Rot y, Rot z • If Rot y = 90 degrees, Rot z == -Rot x Interpolation • Interpolation between two Euler angles is not unique • ex: (x, y, z) rotation – (0, 0, 0) to (180, 0, 0) vs. (0, 0, 0) to (0, 180, 180) – Interpolation about different axes are not independent Interpolation Axis-angle Notation • Define an axis of rotation (x, y, z) and a rotation about that axis, q: R(q, n) • 4 degrees of freedom specify 3 rotational degrees of freedom because axis of rotation is constrained to be a unit vector Axis-angle Notation rperp = r – (n.r) n q V = n x (r – (n.r) n) = n x r Rr r rpar = (n.r) n n Rr = Rrpar + Rrperp = Rrpar + (cos q) rperp + (sin q) V =(n.r) n + cos q(r – (n.r)n) + (sin q) n x r = (cos q)r + (1 – cos q) n (n.r) + (sin q) n x r Axis-angle Rotation Given r – Vector in space to rotate n – Axis in space about which to rotate q – The amount about n to rotate Solve r’ – The rotated vector n r r’ Axis-angle Rotation • Step 1 – Compute rk an extended version of the rotation axis, n – rk = (n ¢ r) r rk r r’ Axis-angle Rotation • Compute r? • r? = r – (n ¢ r) n r? r’ r Axis-angle Rotation • Compute v, a vector perpendicular to rk and r? • v = rk £ r? • Use v and r? and q to compute r’ v cos(q) r? + sin(q) v q r? Axis-angle Notation • No easy way to determine how to concatenate many axis-angle rotations that result in final desired axis-angle rotation • No simple way to interpolate rotations Quaternion • Remember complex numbers: a + ib – Where i2 = -1 • Invented by Sir William Hamilton (1843) – Remember Hamiltonian path from Discrete II? • Quaternion: – Q = a + bi + cj + dk • Where i2 = j2 = k2 = -1 and ij = k and ji = -k – Represented as: q = (s, v) = s + vxi + vyj + vzk Quaternion • Let q1 = (s1, v1) and q2 = (s2, v2) – q1q2 = (s1s2 – v1.v2, s1v2 + s2v1 + v1 x v2) – Conjugate = q1’ = (s, -v) – q1q1’ = s2 + |v|2 = |q|2 = magnitude • If q has unit magnitude – q’ = q-1 (conjugate = inverse) – Define a pure quaternion: p = (0, r), r = unit vector – Rotating p by q • (0, cos2q r + (1 – cos2q) n (n.r) + sin2q n.r) Quaternion • Continue to represent quaternion as a 4 DOF vector (as in axis-angle) • But use quaternion algebra: – (cos (q/2), sin(q/2) nx, sin(q/2) ny, sin(q/2) nz) • Quaternion easily converted into rotation matrix • The product of two unit quaternions is a unit quaternion Quaternion Example • X-roll of p – (cos (p/2), sin (p/2) (1, 0, 0)) = (0, (1, 0, 0)) • Y-roll 0f p – (0, (0, 1, 0)) • Z-roll of p – (0, (0, 0, 1)) • Ry (p) followed by Rz (p) – (0, (0, 1, 0) times (0, (0, 0, 1)) = (0, (0, 1, 0) x (0, 0, 1) = (0, (1, 0, 0)) Quaternion Interpolation • Biggest advantage of quaternions – Interpolation – Cannot linearly interpolate between two quaternions because it would speed up in middle – Instead, Spherical Linear Interpolation, slerp() – Used by modern video games for third-person perspective – Why? Quaternion Interpolation • Quaternion (white) vs. Euler (black) interpolation • Left images are linear interpolation • Right images are cubic interpolation Quaternion Code • http://www.gamasutra.com/features/progra mming/19980703/quaternions_01.htm – Registration required • Camera control code – http://www.xmission.com/~nate/smooth.html • File, gltb.c • gltbMatrix and gltbMotion Representations of Curves • Problems with series of points used to model a curve – Piecewise linear - Does not accurately model a smooth line – It’s tedious – Expensive to manipulate curve because all points must be repositioned • Instead, model curve as piecewise-polynomial – x = x(t), y = y(t), z = z(t) • where x(), y(), z() are polynomials Specifying Curves • Control Points – A set of points that influence the curve’s shape • Knots – Control points that lie on the curve • Interpolating Splines – Curves that pass through the control points (knots) • Approximating Splines – Control points merely influence shape Parametric Curves • Very flexible representation • They are not required to be functions – They can be multivalued with respect to any dimension • Decouples dimension of object from dimension of space Cubic Polynomials • x(t) = axt3 + bxt2 + cxt + dx – Similarly for y(t) and z(t) • Let t: (0 <= t <= 1) • Let T = [t3 t2 t 1] • Coefficient Matrix C • Curve: Q(t) = T.C ax bx c x d x ay by cy dy az bz cz d z Parametric Curves • Derivative of Q(t) is the tangent vector at t: – d/dt Q(t) = Q’(t) = d/dt T . C = [3t2 2t 1 0] . C Piecewise Curve Segments • One curve constructed by connecting many smaller segments end-to-end • Continuity describes the joint Continuity of Curves • Two curves that join together – G0, geometric continuity • If direction (but not necessarily magnitude) of tangent matches – G1 geometric continuity • Matching tangent vectors (direction and magnitude) – C1 continuous, first-degree continuity in t (parametric continuity) • Matching direction and magnitude of dn / dtn • Cn continous Parametric Cubic Curves • In order to assure C2 continuity, curves must be of at least degree 3 • Here is the parametric definition of a spline in two dimensions Parametric Cubic Splines • Can represent this as a matrix too Coefficients • So how do we select the coefficients? – [ax bx cx dx] and [ay by cy dy] must satisfy the constraints defined by the knots and the continuity conditions Parametric Curves • Difficult to conceptualize curve as – x(t) = axt3 + bxt2 + cxt + dx • Instead, define curve as weighted combination of 4 well-defined cubic polynomials • Each curve type defines different cubic polynomials and weighting schemes Parametric Curves • Hermite – two endpoints and two endpoint tangent vectors • Bezier - two endpoints and two other points that define the endpoint tangent vectors • Splines – four control points. – C1 and C2 continuity at the join points – Come close to their control points, but not guaranteed to touch them Hermite Cubic Splines • An example of knot and continuity constraints Assignment 4, part 2 • • • • Environment Maps Alpha Blending Multipass Rendering Multitexturing Reflections Reflections Using Quaternions in Assignment 4 part 2 • Nate’s ‘Smooth’ program uses axis-angle to represent the rotation • He then uses glRotate to convert this to a rotation matrix and adds it to the modelview matrix stack • Instead, you convert axis-angle to quaternion and then to rotation matrix • You then put this rotation matrix on stack