Home | People | Curriculum | Projects | Resources | Media

### Monday, September 22

Mouse & Keyboard Interaction, and 2D Transformations, with OpenGL

Design and implement a C++ program using OpenGL calls to permit the user to point to a position in the drawing window and click to draw a shape using the following scheme:

• left button down (click) -- draw a square
• right button down (ctrl-click) -- draw a triangle

The position of the mouse click indicates the center of the shape. The size of the shape should be (roughly) 30-50 pixels "diameter". You are welcome to experiment with "click and drag" for drawing these shapes, then the size is variable [+10].

The lab is completed as follows:

1. Add the following functions: (Note: the function signature may change if you use "click and drag")
• `void DrawSquare(point where)`
• `void DrawTriangle(point where)`
• `bool validClick(point where)`: using the size of the shape, determine if the position is valid, defined as far enough away from the window edge so that the complete shape can be drawn.
2. Draw shapes at mouse down clicks until the '`T`' key is entered. You will need to save a representation of each shape, including it location, in some type of list, basically saving the universe.
3. Transform the universe of shapes using the OpenGL functions:
``` glTranslate glRotate glScale ```
Transformations are indicated by the following keystrokes:
• r: shift right (or use right arrow)
• l: shift left (or use left arrow)
• u: shift up (or use up arrow)
• d: shift down (or use down arrow)
• x: expand (double in size)
• s: shrink (halve in size)
• c: clockwise rotation of 45 degrees
• w: counter-clockwise rotation of 45 degrees
4. After each transformation, the projection matrix is updated, and you will need to redraw the universe by travering your list and rendering the newly generate vertices and edges of the polygons.
5. Make, run, and test the completed program.
6. Document your code appropriately (especially including your name in the source).
7. Submit your work using `submit`
8. Extra Credit: eventually shear (h) will be added, but you can do this now [+5] by using `glLoadMatrix()` and `glMultMatrix()`

Links for CS212 -- Other CS212 Assignments: 0 1 2 3 4 5 6 7

 Page maintained by John Dougherty, David Wonnacott, and Rachel Heaton. Computer Science Department, Haverford College.