Slides

advertisement
Week 5 - Wednesday





What did we talk about last time?
Project 2
Normal transforms
Euler angles
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

A quaternion has three imaginary parts and one
real part
qˆ  (qˆ v , qw )  iq x  jqy  kq z  qw  qv  qw


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
i  j  k  1
2
2
2
jk  kj  i
ki  ik  j
ij   ji  k





Multiplication
qˆ rˆ  (qv rv  rw qv  qwrv ,qw rw  qv rv )
Addition
qˆ  rˆ  (qv  rv ,qw  rw )
Conjugate
ˆq*  (qv ,qw )
Norm
2
2
2
2
ˆ
n(q)  qx  q y  qz  qw
Identity
ˆi  (0,1)
1
*
 Inverse q
ˆ 
ˆ
q
2
ˆ
n(q)
*
* *
ˆ
ˆ
ˆ
(
q
r
)

r
qˆ
 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:
ˆ (sinφu,cosφ)
q
1





Take a vector or point p and pretend its four
coordinates make a quaternion p̂
ˆ (sinφu,cosφ)
If you have a unit quaternion q
1
ˆ
ˆ
ˆ
the result of qpq is p rotated around the u
axis by 2
1
*
ˆ
ˆ
Note that, because it's a unit quaternion,q  q
There are ways to convert between rotation
matrices and quaternions
The details are in the book
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 q = ( sin φu, cos φ) where u is the x-axis
and φ is 45°
 q = ( sin φ, 0, 0, cos φ)
∗
 q = ( −sin φ, 0, 0, cos φ)
∗
 qpq
= q(0, -3 sin φ, 0, 3cos φ, 0)
= (0, -6sinφcosφ,3cos2φ-3sinφcosφ, 0)
= (0, -3, 0, 0)




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
sin( φ(1  t ))
sin( φt )
sˆ (qˆ ,rˆ , t ) 
qˆ 
rˆ
sin φ
sin φ

To find the angle  between the quaternions,
you can use the fact that cos = qxrx + qyry + qzrz +
qwrw


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

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
n 1
n 1
i 0
i 0
u(t )   w iBi (t )Mi1p where  w i  1

Vertex blending is popular in part because it can
be computed in hardware with the vertex shader


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?


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
m  (1  s)p0 sp1

Morph targets is another technique that adds in
weighted poses to a neutral model




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
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

1
0
P0  
0

0

0 0 0
1 0 0

0 0 0

0 0 1
This projection is not ideal because z values are lost
 Things behind the camera are in front
 z-buffer algorithms don't work
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
2
r l








Left
Right
Bottom
Top
Near
Far

r l

 0
P0  
 0

 0

0
0
2
t b
0
0
0
2
f n
0

r l 
t b 


t b 
f  n

f n
1 

Here is the (OpenGL) matrix that translates all points and
scales them into the canonical view volume



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, SharpDX 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:
 2
r l

 0
P0  
 0

 0

0
0
2
t b
0
0
0
1
f n
0
r l 
r l 
t b 


t b 
n 

f n
1 

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





Here is the SharpDX projection matrix
It is different from the OpenGL again because
it only uses [0,1] for z
 2n
r l

 0
P0  
 0

 0

0
2n
t b
0
0
r l
r l
t b
t b
f
f n
1



0 

fn 

f n
0 
0



Light
Materials
Sensors



Read Chapter 5 for Friday
Exam 1 next Friday
Keep working on Project 2
Download