Title: PPT
1PPTProgramsLabcourse
- http//211.87.235.32/share/ComputerGraphics/
2Transformations
- Shandong University Software College
- Instructor Zhou Yuanfeng
- E-mail yuanfeng.zhou_at_gmail.com
3Objectives
- Introduce standard transformations
- Rotation
- Translation
- Scaling
- Shear
- Derive homogeneous coordinate transformation
matrices - Learn to build arbitrary transformation matrices
from simple transformations
4Why transformation?
After
After
Before
Before
5Why transformation?
Snow construction
6General Transformations
- A transformation maps points to other points
and/or vectors to other vectors
vT(u)
QT(P)
7Affine Transformations
- Linear transformation translation
- However, an affine transformation has only 12
degrees of freedom because 4 of the elements in
the matrix are fixed and are a subset of all
possible 4 x 4 linear transformations
8Affine Transformations
- Line preserving
- Characteristic of many physically important
transformations - Rigid body transformations rotation, translation
- Scaling, shear
- Importance in graphics is that we need only
transform endpoints of line segments and let
implementation draw line segment between the
transformed endpoints
9Pipeline Implementation
T
(from application program)
frame buffer
u
T(u)
transformation
rasterizer
T(v)
T(v)
T(v)
v
T(u)
u
T(u)
vertices
pixels
vertices
10Notation
- We will be working with both coordinate-free
representations of transformations and
representations within a particular frame - P,Q, R points in an affine space
- u, v, w vectors in an affine space
- a, b, g scalars
- p, q, r representations of points
- -array of 4 scalars in homogeneous coordinates
- u, v, w representations of vectors
- -array of 4 scalars in homogeneous coordinates
11The World and Camera Frames
- When we work with representations, we work with
n-tuples or arrays of scalars - Changes in frame are then defined by 4 x 4
matrices - In OpenGL, the base frame that we start with is
the world frame - Eventually we represent entities in the camera
frame by changing the world representation using
the model-view matrix - Initially these frames are the same (MI)
12Moving the Camera
- If objects are on both sides of z0, we must move
camera frame
M
13Translation
- Move (translate, displace) a point to a new
location - Displacement determined by a vector v
- Three degrees of freedom
- PPv
P
v
P
14How many ways?
- Although we can move a point to a new location in
infinite ways, when we move many points there is
usually only one way
object
translation every point displaced by
same vector
15Translation Using Representations
- Using the homogeneous coordinate representation
in some frame - p x y z 1T
- px y z 1T
- vvx vy vz 0T
- Hence p p v or
- xx vx
- yy vy
- zz vz
note that this expression is in four dimensions
and expresses point vector point
16Translation Matrix
- We can also express translation using a
- 4 x 4 matrix T in homogeneous coordinates
- pTp where
- T T(vx, vy, vz)
- This form is better for implementation because
all affine transformations can be expressed this
way and multiple transformations can be
concatenated together
17Rotation (2D)
- Consider rotation about the origin by q degrees
- radius stays the same, angle increases by q
xx cos q y sin q y x sin q y cos q
18Rotation about the z axis
- Rotation about z axis in three dimensions leaves
all points with the same z - Equivalent to rotation in two dimensions in
planes of constant z - or in homogeneous coordinates
- pRz(q)p
xx cos q y sin q y x sin q y cos q z z
19Rotation Matrix
20Rotation about x and y axes
- Same argument as for rotation about z axis
- For rotation about x axis, x is unchanged
- For rotation about y axis, y is unchanged
R Rx(q)
R Ry(q)
21Scaling
Expand or contract along each axis (fixed point
of origin)
xsxx ysyy zszz
pSp
22Reflection
- corresponds to negative scale factors
sx -1 sy 1
original
sx -1 sy -1
sx 1 sy -1
23Inverses
- Although we could compute inverse matrices by
general formulas, we can use simple geometric
observations - Translation T-1(dx, dy, dz) T(-dx, -dy, -dz)
- Rotation R -1(q) R(-q)
- Holds for any rotation matrix
- Note that since cos(-q) cos(q) and
sin(-q)-sin(q) - R -1(q) R T(q)
- Scaling S-1(sx, sy, sz) S(1/sx, 1/sy, 1/sz)
-
24Concatenation
- We can form arbitrary affine transformation
matrices by multiplying together rotation,
translation, and scaling matrices - Because the same transformation is applied to
many vertices, the cost of forming a matrix
MABCD is not significant compared to the cost of
computing Mp for many vertices p - The difficult part is how to form a desired
transformation from the specifications in the
application
25Order of Transformations
- Note that matrix on the right is the first
applied - Mathematically, the following are equivalent
- p ABCp A(B(Cp))
- Note many references use column matrices to
represent points. In terms of column matrices ((A
B) T BT AT) - pT pTCTBTAT
26General Rotation About the Origin
A rotation by q about an arbitrary axis can be
decomposed into the concatenation of rotations
about the x, y, and z axes
R(q) Ry(-qy) Rx(-qx) Rz(qz) Ry(qy) Rx(qx)
y
v
qx qy qz are called the Euler angles
Note that rotations do not commute We can use
rotations in another order but with different
angles
x
z
27Rotation About a Fixed Point other than the Origin
- Move fixed point to origin
- Rotate
- Move fixed point back
- M T(pf) R(q) T(-pf)
28Instance transformation
- In modeling, we often start with a simple object
centered at the origin, oriented with the axis,
and at a standard size - We apply an instance transformation to its
vertices to - Scale
- Orient
- Locate
29Shear
- Helpful to add one more basic transformation
- Equivalent to pulling faces in opposite directions
30Shear Matrix
- Consider simple shear along x axis
x x y cot q y y z z
H(q)
31Rotation around arbitrary vector
R Rz(q)
32OpenGL Matrices
- In OpenGL matrices are part of the state
- Multiple types
- Model-View (GL_MODELVIEW)
- Projection (GL_PROJECTION)
- Texture (GL_TEXTURE) (ignore for now)
- Color(GL_COLOR) (ignore for now)
- Single set of functions for manipulation
- Select which to manipulated by
- glMatrixMode(GL_MODELVIEW)
- glMatrixMode(GL_PROJECTION)
33Current Transformation Matrix (CTM)
- Conceptually there is a 4 x 4 homogeneous
coordinate matrix, the current transformation
matrix (CTM) that is part of the state and is
applied to all vertices that pass down the
pipeline - The CTM is defined in the user program and loaded
into a transformation unit
C
pCp
p
CTM
vertices
vertices
34CTM operations
- The CTM can be altered either by loading a new
CTM or by postmutiplication
Load an identity matrix C ? I Load an arbitrary
matrix C ? M Load a translation matrix C ?
T Load a rotation matrix C ? R Load a scaling
matrix C ? S Postmultiply by an arbitrary
matrix C ? CM Postmultiply by a translation
matrix C ? CT Postmultiply by a rotation matrix
C ? C R Postmultiply by a scaling matrix C ? C S
35Rotation about a Fixed Point
- Start with identity matrix C ? I
- Move fixed point to origin C ? CT
- Rotate C ? CR
- Move fixed point back C ? CT -1
- Result C TR T 1 which is backwards.
- This result is a consequence of doing
postmultiplications. - Lets try again.
36Reversing the Order
- We want C T 1 R T
- so we must do the operations in the following
order - C ? I
- C ? CT -1
- C ? CR
- C ? CT
- Each operation corresponds to one function call
in the program. - Note that the last operation specified is the
first executed in the program
37CTM in OpenGL
- OpenGL has a model-view and a projection matrix
in the pipeline which are concatenated together
to form the CTM - Can manipulate each by first setting the correct
matrix mode
38Rotation, Translation, Scaling
Load an identity matrix
glLoadIdentity()
Multiply on right
- glRotatef(theta, vx, vy, vz)
theta in degrees, (vx, vy, vz) define axis of
rotation
glTranslatef(dx, dy, dz)
glScalef(sx, sy, sz)
Each has a float (f) and double (d) format
(glScaled)
39Example
- Rotation about z axis by 30 degrees with a fixed
point of (1.0, 2.0, 3.0) - Remember that last matrix specified in the
program is the first applied - Demo
glMatrixMode(GL_MODELVIEW) glLoadIdentity() glTr
anslatef(1.0, 2.0, 3.0) glRotatef(30.0, 0.0,
0.0, 1.0) glTranslatef(-1.0, -2.0, -3.0)
40Arbitrary Matrices
- Can load and multiply by matrices defined in the
application program - The matrix m is a one dimension array of 16
elements which are the components of the desired
4 x 4 matrix stored by columns - In glMultMatrixf, m multiplies the existing
matrix on the right
glLoadMatrixf(m) glMultMatrixf(m)
41Matrix multiply
- //?Y?????10???glTranslatef(0,10,0)//??????Draw
Sphere(5)//?X?????10???glTranslatef(10,0,0)//
??????DrawSphere(5)
procedure RenderScene() begin
glMatrixMode(GL_MODELVIEW)
//?Y?????10??? glTranslatef(0,10,0)
//?????? DrawSphere(5)
//?????? glLoadIdentity()
//?X?????10??? glTranslatef(10,0,0)
//?????? DrawSphere(5) end
42Matrix Stacks
- In many situations we want to save transformation
matrices for use later - Traversing hierarchical data structures
- Avoiding state changes when executing display
lists - OpenGL maintains stacks for each type of matrix
- Access present type (as set by glMatrixMode) by
GL_PROJECTION
glPushMatrix() glPopMatrix()
GL_MODEVIEW
43Matrix Stacks
- procedure RenderScene() begin
glMatrixMode(GL_MODELVIEW) //push matrix
stack glPushMatrix //translate 10
along Y axis glTranslatef(0,10,0)
//draw the first sphere DrawSphere(5)
//come back to the last saved state
glPopMatrix // translate 10 along X axis
glTranslatef(10,0,0) //draw the
second sphere DrawSphere(5) end
44Reading Back Matrices
- Can also access matrices (and other parts of the
state) by query functions - For matrices, we use as
glGetIntegerv glGetFloatv glGetBooleanv glGetDoubl
ev glIsEnabled
float m16 glGetFloatv(GL_MODELVIEW, m)
45Using Transformations
- Example use idle function to rotate a cube and
mouse function to change direction of rotation - Start with a program that draws a cube
(colorcube.c) in a standard way - Centered at origin
- Sides aligned with axes
- Will discuss modeling in next lecture
46main.c
- void main(int argc, char argv)
-
- glutInit(argc, argv)
- glutInitDisplayMode(GLUT_DOUBLE GLUT_RGB
- GLUT_DEPTH)
- glutInitWindowSize(500, 500)
- glutCreateWindow("colorcube")
- glutReshapeFunc(myReshape)
- glutDisplayFunc(display)
- glutIdleFunc(spinCube)
- glutMouseFunc(mouse)
- glEnable(GL_DEPTH_TEST)
- glutMainLoop()
47Idle and Mouse callbacks
- void spinCube()
-
- thetaaxis 2.0
- if( thetaaxis gt 360.0 ) thetaaxis - 360.0
- glutPostRedisplay()
void mouse (int btn, int state, int x, int y)
char sAxis "X-axis", "Y-axis", "Z-axis"
/ mouse callback, selects an axis about
which to rotate / if (btn
GLUT_LEFT_BUTTON state GLUT_DOWN)
axis (axis) 3 printf ("Rotate about
s\n", sAxisaxis)
48Display callback
- void display()
-
- glClear(GL_COLOR_BUFFER_BIT
GL_DEPTH_BUFFER_BIT) - glLoadIdentity()
- glRotatef(theta0, 1.0, 0.0, 0.0)
- glRotatef(theta1, 0.0, 1.0, 0.0)
- glRotatef(theta2, 0.0, 0.0, 1.0)
- colorcube()
- glutSwapBuffers()
Note that because of fixed from of callbacks,
variables such as theta and axis must be
defined as globals Demo
49Polygonal Mesh
50Polygonal mesh
Object
Point cloud
51Polygonal mesh
PhD thesis of Hugues Hoppe 1994
52Polygonal mesh
Non-iterative, feature preserving mesh
smoothing ACM Transactions on Graphics, 2003
53Polygonal mesh
CGAL, manual
54Polygonal mesh
55Polygonal mesh
56Polygonal mesh
Mean Value Coordinates for Closed Triangular
Meshes Ju T., Schaefer S. and Warren J. ACM
SIGGRAPH 2005
57Polygonal mesh
SGP 2009
58Polygonal mesh
fx4-10r2x2y4-10r2y2z4-10r2z2 r0
.13
59Representation
60Representation