Computer Graphics 3D Transformations
3D Translation Remembering 2D transformations -> 3x3 matrices, take a wild guess what happens to 3D transformations. T=(t x, t y, t z )
3D Scale S=(s x, s y, s z )
3D Rotations R=(r x, r y, r z, ) What does a rotation in 3D mean? Q: How do we specify a rotation? A: We give a vector to rotate about, and a theta that describes how much we rotate. Q: Since 2D is sort of like a special case of 3D, what is the vector we’ve been rotating about in 2D?
Rotations about the Z axis R=(0,0,1, ) What do you think the rotation matrix is for rotations about the z axis?
Rotations about the X axis R=(1,0,0, ) Let’s look at the other axis rotations
Rotations about the Y axis R=(0,1,0, )
Rotations around a principle axis
Rotations for an arbitrary axis Steps: 1. Normalize vector u 2. Compute 3. Compute 4. Create rotation matrix u
Vector Normalization Given a vector v, we want to create a unit vector that has a magnitude of 1 and has the same direction as v. Let’s do an example.
Computing the Rotation Matrix 1. Normalize u ( the vector we are rotating around ) 2. Compute R x ( x ) 3. Compute R y ( y ) 4. Generate Rotation Matrix
Unit vectors are made of direction cosines: Rotations for an arbitrary axis
Rotation Matrix
Axis-Angle Rotations in OpenGL glRotatef( angle, x, y, z);
Euler Angles More intuitive: represent rotations by 3 angles, one for each axis glRotatef(anglex,1,0,0); glRotatef(angley,0,1,0); glRotatef(anglez,0,0,1); Think: if we have a torus unstranformed at the origin, what will the torus look like if you have anglex=90, angley=90, and anglez=90 Transformed
Gimbal Lock Rotate around these How can we gain altitude here? Initial orientation (x=blue, y=green, z = red)
Gimbal Lock in OpenGL What is the problem here? glRotatef(anglex,1,0,0); glRotatef(angley,0,1,0); glRotatef(anglez,0,0,1);
Avoiding Gimbal Lock: Quaternions Quaternions represent 3D rotations in 4D using imaginary numbers – a 4-tuple Q = (w,x,y,z) Convert Angle-axis -> Quaternion ( ,x,y,z) -> ( cos( /2), xsin( /2), ysin( /2), zsin( /2) ) Why quaternions? No gimbal lock Smooth interpolation between rotations (for animation)
Quaternions Quaternions have rules for multiplication, inversion, etc See: Typical usage: Convert from euler, matrix, or angle-axis Do rotations Convert to angle-axis or matrix
What is going on here? frame1 frame2 frame3
gluLookAt Orients and positions the “camera” gluLookat( eyex, eyey, eyez, centerx, centery, centerz, upx,upy, upz); eye – the position of the camera in world coordinates center – the camera is pointed at this point up – the direction defined to be up for the camera
gluLookAt – in matrix form
Cross Products Given two vectors, the cross product returns a vector that is perpendicular to the plane of the two vectors and with magnitude equal to the area of the parallelogram formed by the two vectors. u
Different Phases: Model Definition
Different Phases: Transformations
Different Phases: Projection
Different Phases: Rasterization
Different Phases: Scan Conversion
What are the steps needed?
Let’s Examine the Camera If I gave you a world, and said I want to “render” it from another viewpoint, what information do I have to give you? –Position –Which way we are looking –Which way is “up” –Aspect Ratio –Field of View –Near and Far
Camera View Direction View Up View Right View Normal
Camera View Up View Right What are the vectors?
Graphics Pipeline So Far Object Object Coordinates Transformation Object -> World World World Coordinates Projection Xform World -> Projection Camera Projection Coordinates Screen Device Coordinates Normalize Xform & Clipping Projection -> Normalized Viewport Normalized Coordinates Viewport Transform Normalized -> Device
Transformation World->Camera View Direction View Up View Right View Normal
Transformation World->Camera View Up = V View Right = u View Direction = -N