380 likes | 400 Views
Geometry: 2-D Transformations. Course web page: http://www.gomezconsultants.com. Chapter #3. Why We Need Transformations. What can we do so far? Draw 2-D shapes by exhaustively listing their vertices Allow user interaction Something missing:
E N D
Geometry: 2-D Transformations Course web page: http://www.gomezconsultants.com Chapter #3
Why We Need Transformations • What can we do so far? • Draw 2-D shapes by exhaustively listing their vertices • Allow user interaction • Something missing: • The ability to specify the intrinsic shape of an object independently of its location, scale, or orientation
Transformations for modeling, viewing • Make object model in idealized coordinate frame • Transform object with appropriate translation, scaling, rotation as needed • Also useful for building complex objects from simpler parts from Hill
Notes on Notation • Vectors, points: x, v (assume column vectors) • Matrices: R, T • Scalars: x, a • Axes, objects: X, Y, O • Coordinate systems: W, C • Specials • Transpose operator: xT (as opposed to x0) • Identity matrix: Id • Matrices/vectors of zeroes, ones: 0, 1
2-D Transformations • Types • Translation • Scaling • Rotation • Shear, reflection • Mathematical representation • OpenGL functions for applying
2-D Scaling sx 1 Horizontal shift proportional to horizontal position
2-D Scaling sy 1 Vertical shift proportional to vertical position
2-D Rotation This is a counterclockwise rotation
2-D Rotation µ This is a counterclockwise rotation
2-D Shear (horizontal) Horizontal displacement proportional to vertical position
2-D Reflection (vertical) Just a special case of scaling—”negative” scaling
2-D Transformations: OpenGL • 2-D transformation functions* • glTranslate(x, y, 0) • glScale(sx, sy, 0) • glRotate(theta, 0, 0, 1) (angle in degrees; direction is counterclockwise) • Notes • Set glMatrixMode(GL_MODELVIEW) first • Transformations should be specified before drawing commands to be affected • Multiple transformations are applied in reverse order *Technically, these are 3-D
Example: 2-D Translation in OpenGL Two ways to do this: glRectf(.25,.25,.75,.75); glTranslatef(.5,.5,0); glRectf(-.25,-.25,.25,.25);
Example: Order of transformations glRotatef(45,0,0,1); glTranslatef(.5,.5,0); glRectf(-.25,-.25,.25,.25); glTranslatef(.5,.5,0); glRotatef(45,0,0,1); glRectf(-.25,-.25,.25,.25); Remember: Order of application is backwards from drawing commands
Limiting “Scope” of Transformations • Transformations are ordinarily applied to all subsequent draw commands • To limit effects, use push/pop functions: glPushMatrix(); // transform // draw affected by transform glPopMatrix(); // draw unaffected by transform
Example: Pushing, popping transformations glPushMatrix(); glTranslatef(.5,.5,0); glRotatef(45,0,0,1); glRectf(-.25,-.25,.25,.25); glPopMatrix(); glPushMatrix(); // draw axis lines glPopMatrix();