1 / 27

Quaternions Design and Creation of Virtual Environments CISE 6930/4930 Section 6589/3146

Quaternions Design and Creation of Virtual Environments CISE 6930/4930 Section 6589/3146. Benjamin Lok Fall 2003. Euler Angles. Orientation of an object in computer graphics is often described using Euler Angles. R x R y R z Any axis order will work and could be used. Yaw, Pitch & Roll.

Télécharger la présentation

Quaternions Design and Creation of Virtual Environments CISE 6930/4930 Section 6589/3146

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. QuaternionsDesign and Creation of Virtual EnvironmentsCISE 6930/4930 Section 6589/3146 Benjamin Lok Fall 2003

  2. Euler Angles • Orientation of an object in computer graphics is often described using Euler Angles. • RxRyRz • Any axis order will work and could be used. • Yaw, Pitch & Roll

  3. Problems with Euler Angles • Rotations not uniquely defined • Ex: (z, x, y) [roll, yaw, pitch] = (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 • Remember, the axes stay in the same place during rotations • Gimbal Lock • Term derived from mechanical problem that arises in gimbal mechanism that supports a compass or a gyro • Second and third rotations have effect of transforming earlier rotations, we lose a degree of freedom • ex: Rot x, Rot y, Rot z • If Rot y = 90 degrees, Rot z is equivalent to -Rot x

  4. A Gimble is a hardware implementation of Euler angles (used for mounting gyroscopes and globes)

  5. Another Problem with Euler Angles • What if we want to produce a smooth animation of a rotation from point P1 to Point P2 around some axis. • The entire rotation is defined as RxRyRz but how do we get an intermediate point? • Rotations are defined as rotations about the x, y and z axes. Rotations about any other vector in space have to be broken down into equivalent rotations about the major axes.

  6. Smooth Rotation y With Euler Angles, knowing the transformations for the entire rotation does not help us with the intermediate rotations. Each is a unique set of three rotations about the x,y and z axes z x

  7. Quaternions • Invented by Sir William Hamilton (1843) • Do not suffer from Gimbal Lock • Provide a natural way to interpolate intermediate steps in a rotation about an arbitrary axis • Are used in many position tracking systems and VR software support systems

  8. Quaternions Definitions & Basic Operations

  9. Remember Complex Numbers? z = a + i b where i = (-1) Can think of a complex number as having a real and an imaginary part or as a vector in two-dimensional space z = [a, b] z1+z2 = (a1 + i b1) + (a2 + i b2) = (a1+a2) + i (b1+b2) z1*z2 = (a1+i b1)*(a2+i b2) = (a1a2–b1b2) + i (a2b1+a1b2)

  10. Quaternions • You can think of quaternions as an extension of complex numbers where there are three different square roots of -1. • q = w + i x + j y + k z where • i = (-1), j = (-1), k = (-1) • i*j = k, j*k = i, k*i = j • j*i = -k, k*j = -i, i*k = -j • You could also think of q as a value in four-dimensional space, q = [w, x, y, z] • Sometimes written as q = [w, v] where w is a scalar and v is a vector in 3-space

  11. Addition of Quaternions q1 + q2 = (w1+ix1+j y1+k z1) + (w2+ix2+j y2+k z2) = w1+w2 + i (x1+x2) + j (y1+y2) +k (z1+z2) q1 + q2 = [w1, v1] + [w2, v2] = [w1+w2, v1+v2]

  12. Multiplication of Quaternions q1 * q2 = (w1+ix1+j y1+k z1) * (w2+ix2+j y2+k z2) = w1w2 + i w1x2 + j w1y2 + k w1z2 + -x1x2 + i w2x1 – j x1z2 + k x1y2 + -y1y2 + i y1z2 + j w2y1 - k x2y1 + -z1z2 - i y2z1 + j x2z1 + k w2z1 q1 * q2 = [w1, v1] * [w2, v2] =

  13. Multiplication of Quaternions q1*q2 = (w1+ix1+jy1+kz1)*(w2+ix2+jy2+kz2) = w1w2 + i w1x2 + j w1y2 + k w1z2 + -x1x2 + i w2x1 – j x1z2 + k x1y2 + -y1y2 + i y1z2 + j w2y1 - k x2y1 + -z1z2 - i y2z1 + j x2z1 + k w2z1 q1*q2 = [w1, v1] * [w2, v2] = [w1w2 – v1°v2, w1v2 +w2v1+ v1v2]

  14. Practice • q1 = [1.57 0 0 1], q2= [.78 0 1 0] • q1 = [.25 3 4 4], q2= [.20 2 9 9] • q1 + q2? q1 + q2 = w1+w2 + i (x1+x2) + j (y1+y2) +k (z1+z2) q1 + q2 = [w1+w2, v1+v2] • q1 * q2? q1 * q2 = (w1+ix1+j y1+k z1) * (w2+ix2+j y2+k z2) = w1w2 + i w1x2 + j w1y2 + k w1z2 + -x1x2 + i w2x1 – j x1z2 + k x1y2 + -y1y2 + i y1z2 + j w2y1 - k x2y1 + -z1z2 - i y2z1 + j x2z1 + k w2z1 [w1w2 – v1°v2, w1v2 +w2v1+ v1v2]

  15. Other operations ||q|| = (w2 + x2 + y2 + z2) ||q|| = 1 is a unit quaternion The inverse of a quaternion, q-1 =[w, -v]/ ||q||2 q*q-1 = [1,0,0,0] Practice: Find ||q|| and q-1 of q1 = [1.57 0 0 1], q2 = [.25 3 4 4] Quaternion multiplication is associate but not commutative

  16. Find the inverse of q = [0,6,8,0] q-1 =[w, -v]/ ||q||2 q-1 =[0,-6,-8,-0]/(0+36+64+0) = [0,-.06,-.08,0]

  17. Find the inverse of q = [0,6,8,0] q-1 =[w, -v]/ ||q||2 q-1 =[0,-6,-8,-0]/(0+36+64+0) = [0,-.06,-.08,0] To check, q*q-1 should give us the identity quaternion. q*q-1 = [0-(6*-.06 + 8*-.08 + 0),[0,0,0]+ [0,0,0] +[0,0,0]] = [1,0, 0, 0] [w1w2 – v1°v2, w1v2 +w2v1+ v1v2]

  18. Quaternions Rotating with Quaternions

  19. Rotation about an arbitrary axis • Let q be a unit quaternion, i.e., ||q|| = 1 • q = [w,x,y,z] describes a rotation through an angle  where w = cos(/2) and [x,y,z] is the axis of rotation. (x,y,z)

  20. Procedure • To create a unit quaternion that represents a rotation of  degrees about an arbitrary axis v = [x,y,z]. q = [cos(/2), sin(/2)*v/||v||]

  21. Find q, s/t q describes a rotation of 60 degrees about v = [3,4,0]. • Remember, we need a unit quaternion. • To get this: • Compute cos (60/2) = cos30 = 1/2 • Compute sin (60/2) = sin30 = 3/2 • Compute v’ = v/||v|| = [3,4,0]/5 = [3/5,4/5,0] • q = [1/2, 3/2*[3/5,4/5, 0]] = [1/2, 33/10, 43/10, 0] • ||q|| = ¼ + 27/100 + 48/100 = (25+27+48)/100 = 1

  22. To rotate a point, P = (px,py,pz) • Protated = q[0,P]q-1 • Remember this is quaternion multiplication not matrix multiplication!

  23. y x z Example: P = (0,1,1) rotated 90 degrees about the vertical y-axis. Rotated point should be (1,1,0)

  24. Example: P = (0,1,1) rotated 90 degrees about the vertical y-axis. • First, compute q • q = [cos(90/2), sin(90/2)[0,1,0]] • q = [cos45, 0, sin45, 0] = [2/2, 0, 2/2, 0] • Next compute q-1 • q-1 = [2/2, 0, -2/2, 0] Why? • Compute q[0,P]q-1 =[2/2, 0, 2/2, 0][0,0,1,1][2/2, 0, -2/2, 0]

  25. Compute q[0,P]q-1 =[2/2, 0, 2/2, 0][0,0,1,1][2/2, 0, -2/2, 0] Remember that q1*q2 = [w1w2 – v1°v2, w1v2 +w2v1+ v1v2] so q[0, P] = [2/2, 0, 2/2, 0][0,0,1,1] = [2/2*0 – [0,2/2,0]°[0,1,1], 2/2[0,1,1] + 0*v1 + v1 x v2 ] = [-2/2, 2/2, 2/2, 2/2] q[0, P] q-1 = [-2/2, 2/2, 2/2, 2/2][2/2, 0, -2/2, 0] = [-2/2* 2/2 – [2/2, 2/2, 2/2]°[0, -2/2, 0], (-2/2)[0, -2/2, 0] +(2/2)*[2/2, 2/2, 2/2] + v1 x v2 = [0, [1/2,1,1/2] + [1/2 ,0,-1/2] = [0, 1, 1, 0] Transformed point is [1,1,0]. See notes page for ALL the details

  26. Why use quaternions? • If you want to apply multiple rotations, say q1 and q2. • When? • Recall: q[0,P]q-1 • Thus: q2 (q1 [0,P] q1-1 ) q2-1 • (q2 q1) [0,P] (q1-1 q2-1 ) • q2 * q1 • Why is a quaternion multiplication better than a matrix multiply? • What about keeping rotations?

  27. Smooth Interpolation • SLERP – spherical linear interpolation • slerp(t, a, b) = f(t) = (b.a-1)t a • What happens when t=0? t=1? • In actuality, we need to conserve camera velocity (Spherical – Cubic Interpolation) Why? • Where have you seen this before? • Bezier/Hermite curves • slerp (t,a,c,d,b) • a, b – start points, c,d – define curve • The curve touchs cd when t=0.5 D A B C

More Related