280 likes | 462 Views
Week 5 - Wednesday. CS361. Last time. What did we talk about last time? Project 2 Normal transforms Euler angles Quaternions. Questions?. Project 2. Quaternions. Quaternions. Quaternions are a compact way to represent orientations Pros: Compact (only four values needed)
E N D
Week 5 - Wednesday CS361
Last time • What did we talk about last time? • Project 2 • Normal transforms • Euler angles • Quaternions
Quaternions • Quaternions are a compact way to represent orientations • Pros: • Compact (only four values needed) • Do not suffer from gimbal lock • Are easy to interpolate between • Cons: • Are confusing • Use three imaginary numbers • Have their own set of operations
Definition • A quaternion has three imaginary parts and one real part • We use vector notation for quaternions but put a hat on them • Note that the three imaginary number dimensions do not behave the way you might expect
Operations • Multiplication • Addition • Conjugate • Norm • Identity
More operations • Inverse • One (useful) conjugate rule: • Note that scalar multiplication is just like scalar vector multiplication for any vector • Quaternion quaternion multiplication is associative but not commutative • For any unit vector u, note that the following is a unit quaternion:
Quaternion transforms • Take a vector or point p and pretend its four coordinates make a quaternion • If you have a unit quaternion the result of is p rotated around the u axis by 2 • Note that, because it's a unit quaternion, • There are ways to convert between rotation matrices and quaternions • The details are in the book
Quaternion rotation example • Take vector (0,0,3), write it as p = (0,0,3,0) • Let's rotate it 90° around the x-axis using a quaternion • We want where u is the x-axis and is 45° • p = (0, -3 sin , 0, 3cos , 0) = (0, -6sincos,3cos2-3sincos, 0) = (0, -3, 0, 0)
Slerp • Short for spherical linear interpolation • Using unit quaternions that represent orientations, we can slerp between them to find a new orientation at time t = [0,1], tracing the path on a unit sphere between the orientations • To find the angle between the quaternions, you can use the fact that cos = qxrx + qyry + qzrz+ qwrw
Vertex blending • If we animate by moving rigid bodies around each other, joints won't look natural • To do so, we define bones and skin and have the rigid bone changes dictate blended changes in the skin
Vertex blending continued • The following equation shows the effect that each bone i (and its corresponding animation transform matrix Bi(t) and bone to world transform matrix Mi ) have on the p, the original location of a vertex • Vertex blending is popular in part because it can be computed in hardware with the vertex shader
Morphing • Morphing is the technique for interpolating between two complete 3D models • It has two problems: • Vertex correspondence • What if there is not a 1 to 1 correspondence between vertices? • Interpolation • How do we combine the two models?
Morphing continued • We're going to ignore the correspondence problem (because it's really hard) • If there's a 1 to 1 correspondence, we use parameter s[0,1] to indicate where we are between the models and then find the new location m based on the two locations p0 and p1 • Morph targets is another technique that adds in weighted poses to a neutral model
Projections • Finally, we deal with the issue of projecting the points into view space • Since we only have a 2D screen, we need to map everything to x and y coordinates • Like other transforms, we can accomplish projection with a 4 x 4 matrix • Unlike affine transforms, projection transforms can affect the w components in homogeneous notation
Orthographic projections • An orthographic projection maintains the property that parallel lines are still parallel after projection • The most basic orthographic projection matrix simply removes all the z values • This projection is not ideal because z values are lost • Things behind the camera are in front • z-buffer algorithms don't work
Canonical view volume • To maintain relative depths and allow for clipping, we usually set up a canonical view volume based on (l,r,b,t,n,f) • These letters simply refer to the six bounding planes of the cube • Left • Right • Bottom • Top • Near • Far • Here is the (OpenGL) matrix that translates all points and scales them into the canonical view volume
Stupid XNA • OpenGL normalizes to a canonical view volume from [-1,1] in x, [-1,1] in y, and [-1,1] in z • Just to be silly, XNA normalizes to a canonical view volume of [-1,1] in x, [-1,1] in y, and [0,1] in z • Thus, its projection matrix is:
Perspective projection • A perspective projection does not preserve parallel lines • Lines that are farther from the camera will appear smaller • Thus, a view frustum must be normalized to a canonical view volume • Because points actually move (in x and y) based on their z distance, there is a distorting term in the w row of the projection matrix
Perspective projection matrix • Here is the XNA projection matrix • It is different from the OpenGL again because it only uses [0,1] for z
Next time… • Light • Materials • Sensors
Reminders • Read Chapter 5 for Friday • Exam 1 next Wednesday • Review all the material so far • Keep working on Project 2