Upload
christian-hudson
View
221
Download
5
Tags:
Embed Size (px)
Citation preview
JEFF CHASTINE 1
and an introduction to matrices
COORDINATE SYSTEMS
JEFF CHASTINE 2
THE LOCAL COORDINATE SYSTEM• Sometimes called “Object Space”
• It’s the coordinate system the model was made in
JEFF CHASTINE 3
THE LOCAL COORDINATE SYSTEM• Sometimes called “Object Space”
• It’s the coordinate system the model was made in
(0, 0, 0)
JEFF CHASTINE 4
THE WORLD SPACE• The coordinate system of the virtual environment
(619, 10, 628)
JEFF CHASTINE 5
(619, 10, 628)
JEFF CHASTINE 6
QUESTION
• How did get the monster positioned correctly in the world?
• Let’s come back to that…
JEFF CHASTINE 7
CAMERA SPACE• It’s all relative to the camera…
JEFF CHASTINE 8
CAMERA SPACE• It’s all relative to the camera… and the camera never moves!
(0, 0, -10)
JEFF CHASTINE 9
THE BIG PICTURE• How to we get from space to space?
? ?
JEFF CHASTINE 10
THE BIG PICTURE• How to we get from space to space?
• For every model
• Have a (M)odel matrix!
• Transforms from object to world space
M ?
JEFF CHASTINE 11
THE BIG PICTURE• How to we get from space to space?
• To put in camera space
• Have a (V)iew matrix
• Usually need only one of these
M V
JEFF CHASTINE 12
THE BIG PICTURE• How to we get from space to space?
• The ModelView matrix
• Sometimes these are combined into one matrix
• Usually keep them separate for convenience
M V
MV
JEFF CHASTINE 13
MATRIX - WHAT?• A mathematical structure that can:
• Translate (a.k.a. move)
• Rotate
• Scale
• Usually a 4x4 array of values
• Idea: multiply each point by a matrix to get the new point
• Your graphics card eats matrices for breakfast
[1.0 0.0 0.0 0.00.0 1.0 0.0 0.00.0 0.0 1.0 0.00.0 0.0 0.0 1.0
]The Identity Matrix
JEFF CHASTINE 14
BACK TO THE BIG PICTURE• If you multiply a matrix by a matrix, you get a matrix!
• How might we make the model matrix?
M
JEFF CHASTINE 15
BACK TO THE BIG PICTURE• If you multiply a matrix by a matrix, you get a matrix!
• How might we make the model matrix?
M
Translation matrix TRotation matrix R1
Rotation matrix R2
Scale matrix S
JEFF CHASTINE 16
BACK TO THE BIG PICTURE• If you multiply a matrix by a matrix, you get a matrix!
• How might we make the model matrix?
M
Translation matrix TRotation matrix R1
Rotation matrix R2
Scale matrix S
T * R1 * R2 * S = M
JEFF CHASTINE 17
MATRIX ORDER• Multiply left to right
• Results are drastically different
(an angry vertex)
JEFF CHASTINE 18
MATRIX ORDER• Multiply left to right
• Results are drastically different
• Order of operations
• Rotate 45°
JEFF CHASTINE 19
MATRIX ORDER• Multiply left to right
• Results are drastically different
• Order of operations
• Rotate 45°
• Translate 10 units
JEFF CHASTINE 20
MATRIX ORDER• Multiply left to right
• Results are drastically different
• Order of operations
• Rotate 45°
• Translate 10 units
before after
JEFF CHASTINE 21
MATRIX ORDER• Multiply left to right
• Results are drastically different
• Order of operations
JEFF CHASTINE 22
MATRIX ORDER• Multiply left to right
• Results are drastically different
• Order of operations
• Translate 10 units
JEFF CHASTINE 23
MATRIX ORDER• Multiply left to right
• Results are drastically different
• Order of operations
• Translate 10 units
• Rotate 45°
JEFF CHASTINE 24
MATRIX ORDER• Multiply left to right
• Results are drastically different
• Order of operations
• Translate 10 units
• Rotate 45°
before
after
JEFF CHASTINE 25
BACK TO THE BIG PICTURE• If you multiply a matrix by a matrix, you get a matrix!
• How might we make the model matrix?
M
Translation matrix TRotation matrix R1
Rotation matrix R2
Scale matrix S
T * R1 * R2 * S = M Backwards
JEFF CHASTINE 26
BACK TO THE BIG PICTURE• If you multiply a matrix by a matrix, you get a matrix!
• How might we make the model matrix?
M
Translation matrix TRotation matrix R1
Rotation matrix R2
Scale matrix S
S * R1 * R2 * T = M
JEFF CHASTINE 27
THE (P)ROJECTION MATRIX• Projects from 3D into 2D
• Two kinds:
• Orthographic: depth doesn’t matter, parallel remains parallel
• Perspective: Used to give depth to the scene (a vanishing point)
• End result: Normalized Device Coordinates (NDCs between -1.0 and +1.0)
JEFF CHASTINE 28
ORTHOGRAPHIC VS. PERSPECTIVE
JEFF CHASTINE 29
AN OLD VERTEX SHADERin vec4 vPosition; // The vertex in NDC
void main () {
gl_Position = vPosition;
}
Originally we passed using NDCs (-1 to +1)
JEFF CHASTINE 30
A BETTER VERTEX SHADERin vec4 vPosition; // The vertex in the local coordinate system
uniform mat4 mM; // The matrix for the pose of the model
uniform mat4 mV; // The matrix for the pose of the camera
uniform mat4 mP; // The projection matrix (perspective)
void main () {
gl_Position = mP*mV*mM*vPosition;
}
Original (local) positionNew position in NDC
JEFF CHASTINE 31
SMILE – IT’S THE END!
HOW ABOUT MORE THAN ONE OBJECT?
• Hierarchical Transformations
• Composing transformations
• Coordinate systems/frames
33
COMPOSING TRANSFORMATIONS: ROTATION ABOUT A FIXED POINT
Basic idea:1) Move fixed point to origin2) Rotate3) Move the fixed point backRemember, postmultiplication applies transforms in reverse
Result: M = T RT –1
What does this look like graphically?
ROTATE AROUND A FIXED POINTT-1
ROTATE AROUND A FIXED POINTR
Ө
ROTATE AROUND A FIXED POINTR
Ө
ROTATE AROUND A FIXED POINTT
Ө
38
OPENGL/GLM EXAMPLE
• Rotation about z axis by 30 degrees with a fixed point of (1.0, 2.0, 3.0)
• Remember that last transform specified in the program is the first applied
model *=glm::translate(1.0, 2.0, 3.0)*glm::rotate(30.0, 0.0, 0.0, 1.0)*glm::translate(-1.0, -2.0, -3.0);cube.render(view*model, &shader);...
TRANSFORMATION HIERARCHIES
• For example, a robot arm
Transformation Hierarchies
• Let’s examine:
Transformation Hierarchies
• What is a better way?
Transformation Hierarchies
• What is a better way?
Transformation Hierarchies• We can have transformations be in relation to each other• How do we do this in openGL and glm?
World Coordinates
Upper Arm Coordinates
Lower Arm Coordinates
Hand Coordinates
Transformation: Upper Arm -> World
Transformation: Lower -> Upper
Transformation: Hand-> Lower
Transformation Hierarchies• Activity: how you would have an object B orbiting object A, and
object A is constantly translating.
World Coordinates
Upper Arm Coordinates
Lower Arm Coordinates
Hand Coordinates
Transformation: Upper Arm -> World
Transformation: Lower -> Upper
Transformation: Hand-> Lower