Transcript PowerPoint
CS 551 / 645:
Introductory Computer Graphics
Geometric Transforms
Administrivia
Return assignment 1
Hand out assignment 2
Today’s reading material: FvD, Chapter 5
Recap: Rendering Pipeline (3-D)
Scene graph
Object geometry
Result:
Modeling
Transforms
• All vertices of scene in shared 3-D “world” coordinate system
Lighting
Calculations
• Vertices shaded according to lighting model
Viewing
Transform
• Scene vertices in 3-D “view” or “camera” coordinate system
Clipping
Projection
Transform
• Exactly those vertices & portions of polygons in view frustum
• 2-D screen coordinates of clipped vertices
Recap: Transformations
Modeling transforms
– Size, place, scale, and rotate objects parts of the
model w.r.t. each other
– Object coordinates world coordinates
Y
Y
X
Z
Z
X
Rigid-Body Transforms
Goal: object coordinatesworld coordinates
Idea: use only transformations that preserve
the shape of the object
– Rigid-body or Euclidean transforms
– Includes rotation, translation, and scale
To reiterate: we will represent points as
column vectors:
x
( x, y , z ) y
z
Translations
For convenience we usually describe objects
in relation to their own coordinate system
We can translate or move points to a new
position by adding offsets to their coordinates:
x' x tx
y ' y ty
z ' z tz
– Note that this translates all points uniformly
Scaling
Scaling a coordinate means multiplying each
of its components by a scalar
Uniform scaling means this scalar is the
same for all components:
2
Scaling
Non-uniform scaling: different scalars per
component:
X 2,
Y 0.5
How can we represent this in matrix form?
Scaling
Scaling operation:
Or, in matrix form:
x' ax
y ' by
z ' cz
x ' a 0 0 x
y' 0 b 0 y
z ' 0 0 c z
scaling matrix
2-D Rotation
(x’, y’)
(x, y)
x’ = x cos() - y sin()
y’ = x sin() + y cos()
2-D Rotation
This is easy to capture in matrix form:
x' cos sin x
y ' sin cos y
3-D is more complicated
– Need to specify an axis of rotation
– Simple cases: rotation about X, Y, Z axes
3-D Rotation
What does the 3-D rotation matrix look like
for a rotation about the Z-axis?
– Build it coordinate-by-coordinate
x' cos() sin( ) 0 x
y ' sin( ) cos() 0 y
z ' 0
0
1 z
3-D Rotation
What does the 3-D rotation matrix look like
for a rotation about the Y-axis?
– Build it coordinate-by-coordinate
x' cos() 0 sin( ) x
y ' 0
1
0
y
z ' sin( ) 0 cos() z
3-D Rotation
What does the 3-D rotation matrix look like
for a rotation about the X-axis?
– Build it coordinate-by-coordinate
0
0 x
x' 1
y ' 0 cos() sin( ) y
z ' 0 sin( ) cos() z
3-D Rotation
General rotations in 3-D require rotating
about an arbitrary axis of rotation
Deriving the rotation matrix for such a
rotation directly is a good exercise in linear
algebra
Standard approach: express general rotation
as composition of canonical rotations
– Rotations about X, Y, Z
Composing Canonical Rotations
Goal: rotate about arbitrary vector A by
– Idea: we know how to rotate about X,Y,Z
So, rotate about Y by until A lies in the YZ plane
Then rotate about X by until A coincides with +Z
Then rotate about Z by
Then reverse the rotation about X (by -)
Then reverse the rotation about Y (by -)
Composing Canonical Rotations
First: rotating about Y by until A lies in YZ
– Draw it…
How exactly do we calculate ?
– Project A onto XZ plane
– Find angle to X:
= -(90° - ) = - 90 °
Second: rotating about X by until A lies on Z
How do we calculate ?
Composing Canonical Rotations
Why are we slogging through all this tedium?
A: Because you’ll have to do it on the test
3-D Rotation Matrices
So an arbitrary rotation about A composites
several canonical rotations together
We can express each rotation as a matrix
Compositing transforms == multiplying
matrices
Thus we can express the final rotation as the
product of canonical rotation matrices
Thus we can express the final rotation with a
single matrix!
Compositing Matrices
So we have the following matrices:
p: The point to be rotated about A by
Ry : Rotate about Y by
Rx : Rotate about X by
Rz : Rotate about Z by
Rx -1: Undo rotation about X by
Ry-1 : Undo rotation about Y by
In what order should we multiply them?
Compositing Matrices
Short answer: the transformations, in order,
are written from right to left
– In other words, the first matrix to affect the vector
goes next to the vector, the second next to the
first, etc.
So in our case:
p’ = Ry-1 Rx -1 Rz Rx Ry p
Rotation Matrices
Notice these two matrices:
Rx : Rotate about X by
Rx -1: Undo rotation about X by
How can we calculate Rx -1?
Rotation Matrices
Notice these two matrices:
Rx : Rotate about X by
Rx -1: Undo rotation about X by
How can we calculate Rx -1?
– Obvious answer: calculate Rx (-)
– Clever answer: exploit fact that rotation matrices
are orthonormal
Rotation Matrices
Notice these two matrices:
Rx : Rotate about X by
Rx -1: Undo rotation about X by
How can we calculate Rx -1?
– Obvious answer: calculate Rx (-)
– Clever answer: exploit fact that rotation matrices
are orthonormal
What is an orthonormal matrix?
What property are we talking about?
Rotation Matrices
Orthonormal matrix:
– orthogonal (columns/rows linearly independent)
– Columns/rows length of 1
The inverse of an orthogonal matrix is just its
transpose:
a b
d e
h i
1
c
a b
f d e
h i
j
T
c
a
f b
c
j
d
e
f
h
i
j
Translation Matrices?
We can composite scale matrices just as we
did rotation matrices
But how to represent translation as a matrix?
Answer: with homogeneous coordinates
Homogeneous Coordinates
Homogeneous coordinates: represent
coordinates in 3 dimensions with a 4-vector
x / w x
y / w y
( x, y , z )
z / w z
1 w
(Note that typically w = 1 in object coordinates)
Homogeneous Coordinates
Homogeneous coordinates seem unintuitive,
but they make graphics operations much
easier
Our transformation matrices are now 4x4:
0
0
1
0 cos() sin( )
Rx
0 sin( ) cos()
0
0
0
0
0
0
1
Homogeneous Coordinates
Homogeneous coordinates seem unintuitive,
but they make graphics operations much
easier
Our transformation matrices are now 4x4:
cos()
0
Ry
sin( )
0
0 sin( ) 0
1
0
0
0 cos() 0
0
0
1
Homogeneous Coordinates
Homogeneous coordinates seem unintuitive,
but they make graphics operations much
easier
Our transformation matrices are now 4x4:
cos() sin( )
sin( ) cos()
Rz
0
0
0
0
0 0
0 0
1 0
0 1
Homogeneous Coordinates
Homogeneous coordinates seem unintuitive,
but they make graphics operations much
easier
Our transformation matrices are now 4x4:
Sx 0
0 Sy
S
0 0
0 0
0 0
0 0
Sz 0
0 1
Homogeneous Coordinates
How can we represent translation as a
4x4 matrix?
A: Using the rightmost column:
0
0
T
0
0
0 0 Tx
0 0 Ty
0 0 Tz
0 0 1
Translation Matrices
Now that we can represent translation as a
matrix, we can composite it with other
transformations
Ex: rotate 90° about X, then 10 units down Z:
x' 1
y ' 0
z ' 0
w' 0
0 0 0 1
0
0
1 0 0 0 cos(90) sin( 90)
0 1 10 0 sin( 90) cos(90)
0 0 1 0
0
0
0 x
0 y
0 z
1 w
Translation Matrices
Now that we can represent translation as a
matrix, we can composite it with other
transformations
Ex: rotate 90° about X, then 10 units down Z:
x' 1
y ' 0
z ' 0
w' 0
0 0 0 1
1 0 0 0
0 1 10 0
0 0 1 0
0 0 0 x
0 1 0 y
1 0 0 z
0 0 1 w
Translation Matrices
Now that we can represent translation as a
matrix, we can composite it with other
transformations
Ex: rotate 90° about X, then 10 units down Z:
x' 1
y ' 0
z ' 0
w' 0
0 0 0 x
0 1 0 y
1 0 10 z
0 0 1 w
Translation Matrices
Now that we can represent translation as a
matrix, we can composite it with other
transformations
Ex: rotate 90° about X, then 10 units down Z:
x' x
y' z
z ' y 10
w' w
Transformation Commutativity
Is matrix multiplication, in general,
commutative? Does AB = BA?
What about rotation, scaling, and translation
matrices?
– Does RxRy = RyRx?
– Does RAS = SRA ?
– Does RAT = TRA ?
More On Homogeneous Coords
What effect does the following matrix have?
x' 1
y ' 0
z ' 0
w' 0
0 x
0 y
0 z
0 0 10 w
0 0
1 0
0 1
Conceptually, the fourth coordinate w is a bit
like a scale factor
Homogenous Coordinates
In particular, increasing w makes things
smaller
We think of homogenous coordinates as
defining a projective space
– Increasing w “getting further away”
– Points with w = 0 are, in this sense, projected on
the plane at infinity
Will come in handy for projection matrices
Perspective Projection
We talked about geometric transforms,
focusing on modeling transforms
– Ex: translation, rotation, scale, gluLookAt()
– These are encapsulated in the OpenGL
modelview matrix
Can also express perspective projection (and
other projections) as a matrix
Next few slides: representing perspective
projection with the projection matrix
Perspective Projection
In the real world, objects exhibit perspective
foreshortening: distant objects appear smaller
The basic situation:
Perspective Projection
When we do 3-D graphics, we think of the
screen as a 2-D window onto the 3-D world:
How tall should
this bunny be?
Perspective Projection
The geometry of the situation is that of
similar triangles. View from above:
View
plane
X
x’ = ?
(0,0,0)
Z
d
P (x, y, z)
What is x’?
Perspective Projection
Desired result for a point [x, y, z, 1]T projected
onto the view plane:
x' x
,
d z
dx
x
x'
,
z
z d
y' y
d z
dy
y
y'
, zd
z
z d
What could a matrix look like to do this?
A Perspective Projection Matrix
Answer:
1
0
Mperspective
0
0
0
1
0
0
0
1
0 1d
0
0
0
0
A Perspective Projection Matrix
Example:
x 1
y 0
z 0
z d 0
0
1
0
0
0
1
0 1d
0 x
0 y
0 z
0 1
Or, in 3-D coordinates:
x
,
z d
y
, d
zd
Projection Matrices
Now that we can express perspective
foreshortening as a matrix, we can composite
it onto our other matrices with the usual
matrix multiplication
End result: a single matrix encapsulating
modeling, viewing, and projection transforms
Matrix Operations In OpenGL
Certain commands affect the current matrix
in OpenGL
– glMatrixMode() sets the current matrix
– glLoadIdentity() replaces the current matrix
with an identity matrix
– glTranslate() postmultiplies the current matrix
with a translation matrix
– gluPerspective() postmultiplies the current
matrix with a perspective projection matrix
It is important that you understand the order
in which OpenGL concatenates matrices
Matrix Operations In OpenGL
In OpenGL:
– Vertices are multiplied by the modelview matrix
– The resulting vertices are multiplied by the
projection matrix
Example:
– Suppose you want to scale an object, translate it,
apply a lookat transformation, and view it under
perspective projection. What order should you
make calls?
Matrix Operations in OpenGL
Problem: scale an object, translate it, apply a lookat
transformation, and view it under perspective
A correct code fragment:
glMatrixMode(GL_PERSPECTIVE);
glLoadIdentity();
gluPerspective(…);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(…);
glTranslate(…);
glScale(…);
/* Draw the object... */
Matrix Operations in OpenGL
Problem: scale an object, translate it, apply a lookat
transformation, and view it under perspective
An incorrect code fragment:
glMatrixMode(GL_PERSPECTIVE);
glLoadIdentity();
glTranslate(…);
glScale(…);
gluPerspective(…);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(…);
/* Draw the object... */