380 likes | 409 Views
Explore the need for transformations in 2-D geometry, how to draw shapes with vertices, and manipulate objects independently of location, scale, or orientation. Learn about translation, scaling, rotation, shearing, and reflection, and their mathematical representations. Discover how to apply transformations in OpenGL and manage transformation scopes effectively.
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();