2COEN 290 - Computer Graphics I
Evening’s Goals
Discuss viewing and modeling transformations
Describe matrix stacks and their uses Show basic geometric rasterization and
clipping algorithms
3COEN 290 - Computer Graphics I
Modeling Objects
Recall objects are composed of geometric primitives• each primitive is composed of vertices
Model around the origin• model just means
“determine an object’s vertices”
4COEN 290 - Computer Graphics I
Modeling Transformations
Position objects in world coordinates Move coordinate systems, not objects Affects all objects rendered after
transformation Types
• translation• scale• rotation• shear
5COEN 290 - Computer Graphics I
Translation
Move the origin to a new location
6COEN 290 - Computer Graphics I
1000
100
010
001
),,(z
y
x
zyxt
t
t
tttT
glTranslate[fd]()
glTranslatef( tx, ty, tz );
7COEN 290 - Computer Graphics I
Scale
Stretch, mirror or decimate a coordinate direction
recthreflect/st1rinkreflect/sh01
decimate0shrink10stretch1
ss
ss
Note, there’s a translation applied here to make thingseasier to see
8COEN 290 - Computer Graphics I
glScale[fd]()
glScalef( sx, sy, sz );
1000
000
000
000
),,(z
y
x
zyxs
s
s
sssS
9COEN 290 - Computer Graphics I
Rotation
Rotate coordinate system about an axis in space
Note, there’s a translation applied here to make thingseasier to see
10
COEN 290 - Computer Graphics I
glRotate[fd]()
glRotatef( angle, x, y, z );
0
00
xyxz
yzS
zyxu
zyxv
vv
SuuIuuM tt )sin())(cos(
1000
0
0
0
vR M
11
COEN 290 - Computer Graphics I
Some Additional Rotation Examples
10000)cos()sin(00)sin()cos(00001
xR
1000
0)cos(0)sin(
0010
0)sin(0)cos(
yR
12
COEN 290 - Computer Graphics I
Shear
Scaling in one dimension depends on another
For example
No OpenGL command• load custom matrix
zfyfxx xzxy
13
COEN 290 - Computer Graphics I
Shear
Making a shear matrix
1000
01
01
01
zyzx
yzyx
xzxy
ff
ff
ff
H
14
COEN 290 - Computer Graphics I
Other OpenGL Matrix Commands
glMultMatrix( m )• multiples the current matrix by m
glLoadMatrix( m )• replaces the current matrix by m
glLoadIdentity()• replace the current matrix with an identity
matrix
15
COEN 290 - Computer Graphics I
OpenGL Matrix Format
GLfloat m[16];
151173
141062
13951
12840
mmmmmmmmmmmmmmmm
16
COEN 290 - Computer Graphics I
Modeling Transforms and our Pipeline
WorldCoordinates
EyeCoordinates
ClipCoordinates
NDC’s
PerspectiveDivideProjection
Transformation
ModelCoordinates
ModelingTransformations
17
COEN 290 - Computer Graphics I
Using Multiple Modeling Transforms
Multiple modeling transforms form a composite modeling transform
Individual transform matrices are multiplied together• for example
),,()(),,( zyxvzyx sssSRtttTM
18
COEN 290 - Computer Graphics I
Multiplying Matrices
Matrix multiplication is not commutative• in general,• order of operations is important
OpenGL multiples matrices on the right
BAAB
DCBADCBA
19
COEN 290 - Computer Graphics I
Independent vs. Dependent Transforms
Every modeling transform affects the model coordinate system
Transformations accumulate• we record every transformation every made• to undo a transform, we’d need to do the
inverse transform– this is very inconvenient
20
COEN 290 - Computer Graphics I
A Stack Based Solution
We create a stack containing matrices Any transform multiples the top of stack Push makes a copy and pushes it onto the
stack Pop discards the top of stack
21
COEN 290 - Computer Graphics I
A Stack Based Solution ( cont. )
wzyx
ProjectionTransformation
1wzwywx
ModelingTransformations
22
COEN 290 - Computer Graphics I
OpenGL Matrix Stack Commands
Top of stack matrix is called the current matrix
glPushMatrix()• copy the current matrix and pushes it
glPopMatrix()• pop the current matrix
23
COEN 290 - Computer Graphics I
OpenGL Matrix Stacks
Why multiple matrix stacks?• certain techniques are done in different spaces
glMatrixMode( mode )• choose which stack to manipulate
–GL_MODELVIEW–GL_PROJECTION
24
COEN 290 - Computer Graphics I
Current Transformation Pipeline
WorldCoordinates
EyeCoordinates
ClipCoordinates
NDC’s
PerspectiveDivideProjection
Transformation
ModelCoordinates
ModelCoordinates
ModelCoordinates
ModelingTransformations
25
COEN 290 - Computer Graphics I
Eye coordinates are nice, but ...
Eye coordinates are restrictive• eye’s positioned at the origin• looking down the -z axis
What if we want to look at the scene from somewhere else?• use a viewing transformation
26
COEN 290 - Computer Graphics I
Viewing Transformations
Reorient world coordinates to match eye coordinates
Basically just a modeling transform• affects the entire scene• usually a translation and a rotation
Usually set up after the projection transform, but before any modeling transforms
27
COEN 290 - Computer Graphics I
The Simplest Viewing Transform
“Push” the origin into the viewing frustum
z
near
far
y y
farneartz 21
28
COEN 290 - Computer Graphics I
polarview()
Useful if you want to view an entire objectpolarview( dist, elev, azim, twist ){glTranslatef( 0, 0, -dist );glRotatef( -twist, 0, 0, 1 );glRotatef( -elev, 1, 0, 0 );glRotatef( azim, 0, 0, 1 );}• update elev and azim for interactive viewing
29
COEN 290 - Computer Graphics I
Transforming World to Eye Coordinates
Viewing transformgluLookAt( eyex, eyey, eyez,
lookx, looky, lookz,
upx, upy, upz ); Creates an orthonormal basis
• a set of linearly independent vectors of unit length
30
COEN 290 - Computer Graphics I
Creating an Orthonormal Basis
1000000
ˆˆˆ
ˆ
ˆ
ˆ
ˆ
zyx
zyx
zyx
upn
upn
eyelook
eyelook
nnnvvvuuu
nuv
u
n
31
COEN 290 - Computer Graphics I
gluLookAt( eyex, eyey, eyez,
lookx, looky, lookz,
upx, upy, upz ){
/* Create matrix m */ glMultMatrixf( m ); glTranslatef( -eyex, -eyey, -eyez );}
32
COEN 290 - Computer Graphics I
Our Final Transformation Pipeline
WorldCoordinates
EyeCoordinates
ClipCoordinates
NDC’s
PerspectiveDivideProjection
Transformation
ViewingTransformation
ModelCoordinates
ModelCoordinates
ModelCoordinates
ModelingTransformations
33
COEN 290 - Computer Graphics I
Retrieving Matrix information
GLfloat m[16];glGetFloatv( which, m );
which is which matrix stack to access• GL_MODELVIEW_MATRIX• GL_PROJECTION_MATRIX
34
COEN 290 - Computer Graphics I
Putting it all Together
General flow of transformations projection transformation viewing transformation push matrix modeling transformation render pop matrix goto as necessary