HW3: Create an OpenGL-based program

Summary

Your program needs to make use of OpenGL calls, and must include interaction via keyboard/mouse. That's about it! Also, this is a team project, which will be presented in class near the end of the term. Read on for more detail.

Due date

4/28/08, before start of class. This HW has NO extensions! You must be all done (turn in the code+docs via Digital Dropbox) by the due date. No exceptions at all, sorry.

Platforms

Unix (aludra) or PC or Mac.

Team membership

Four students per team.

Presentation schedule, teams

Details

Do get your project idea cleared by me/TAs before you start designing and coding! This is to ensure that your program is not overly simplistic or at the other end, incredibly complex that you might not finish it on time.Email us your idea as soon as possible, we'll get back to you right away. Verbal OKs are not OK! This is to avoid any potential disputes regarding what is agreed upon.

Here are add-on 'extras' that we allow, for use with your program:

These are NOT allowed: The reason for disallowing the above is that HW3 is not about creating a fancy game, it has to do with becoming familiar with raw OpenGL calls.

Your team will present the project in class (spread over two classes). It will be graded (during the presentation) on the following criteria:

Be aware of 'team dynamics', and work out any conflicts among yourselves. I can't/won't mediate disputes. Everyone in a team will receive the same score, regardless of what their role is (designer, coder, presenter, etc.) or how much they contribute. You need to work out among yourselves how the duties are divided up. Everyone MUST present as part of a team, NO individual submissions! Also, each team must consist of 4 people.

In addition to your code, you also need to create documentation that describes the implementation of the project, problems you encountered during the implementation and possible future improvements. You may lose points if you only submit trivial 'readme' files. You can use the documentation to present during the demo (ie documentation and talk material can be the same thing).

Submission instructions

All items must be submitted as a compressed .zip file (<your login id>_hw3.zip). Use one of the login IDs of your team members. ZIP file must include:

Submit your assignment using the Digital Dropbox on Blackboard. Also, a forum for HW3 has been created on the Blackboard website. Feel free to post doubts/questions there, or use it to find project partners.

Presentation tips

Your presentation should consist of a demo. of your program as well as a brief talk on it.

Project suggestions

You have a lot of freedom in defining (subject to my approval) what the project will be. Read below for some ideas.

Modeling

Synthesize an interesting 3D model (ie polygonal geometry, etc.) and display the model in an OpenGL window. Shown below is a list of possibilities. Alternately you can try to come up your own interesting surfaces. You can think of animating such surfaces by varying (animating) constants that figure in the surfaces' equations or procedures. Also, you program must allow the user to interact with the scene (rotate, translate, zoom) using mouse and keyboard. Extra credit (10 %) will be given to complex/creative models.

Animation

A simple animation project is to simulate basic biped motion. You would create a simple biped model (a body, two hands and two legs) using basic geometric primitives, and make it 'walk' by animating its torso, hands and legs. Extra credits will be given for more creative models.

Your biped has to mimic human motion. For this assignment, you may assume that your biped model is moving on a plane (flat) ground. So you just need to ensure that the bottommost point of at least one of the legs touches the ground and that the biped slowly 'walks' forward on pressing the 'p' key. Alternately, if you create a more complex biped skeleton and animate it using motion capture data (in the popular 'BVH' file format) instead, you'll get up to 20% extra credit! Note that a biped skeleton that will be driven by BVH data will need to be more complex (with more linkages) compared to the simplified version.

When you execute your program, a window should appear showing the biped model. Your program should allow the user to interact with the scene using mouse and keyboard. In addition, as soon as the user presses ‘p’ then the biped should start moving (details of motion mentioned below). If the user presses ‘p’ again, then your biped should pause (stop moving). (i.e. pressing ‘p’ toggles the motion ON and OFF).

Image processing tool

Develop a rudimentary image processing tool. Your program should read pixel data (via a PPM file), display it in a standard OpenGL window and allow the user to run some simple image processing (filters) on it.

Input

Input will be a ppm image. Your program is expected to run as follows:
imgproc <input_file>
where <input_file> is the name of the .ppm file which will be processed by your program)

Output

The program should open a window displaying the image. It should then allow the user to perform the (at least, usually many more) following filtering operations on the image: Repeated application of the filters should affect the input image cumulatively, always display the latest result on the screen. Also, 10 % extra credit will be given if you provide more operations than the two above. You can think about doing region-of-influence (ROI) operations, warping, drawing/painting over the image, doing 'animations' etc.

Interaction

On the right click of the mouse, a menu should appear which lists all the operations allowed on the image. When the user clicks on one of the options, your program should apply the corresponding operation on the image and display the result in the window.

More ideas

In addition to the 'modeling', 'animation' and 'image processing' categories above, you can also consider coding a small game that might involve elements from all three. Keep it simple though!

Want even more information on what to pick for your topic? See below for more ideas.

More on suggestions for topics (and even more suggestions!)

The following are extra notes on suggestions listed above. Feel free to build on these or propose your own..

'animation' option

A possible project is to build a .bvh (mocap data) viewer. Sources of BVH format info.:

Sample BVH files:

Also, this is a BVH loader written in MEL (Maya's scripting language). Feel free to use it as a basis to code your own reader.

A good mocap link: Ohio State Mocap Lab

A creative option is to use objects such as nuts/bolts, food items (veggies!) etc. as substitutes for bones and joints.. Eg. check out Google search.


You can also build small, simple interactive games. If you create the game pieces as .obj files you can use the parser from HW2 to load them in.

'image-processing' option

Here's a barebones program showing pixel handling in OpenGL. You can use this as a starting point for your image-processing program. It produces this output:

As mentioned above, if you choose this option you'd need to implement a variety of non-trivial filters etc.

'modeling' option

You might find the following collection of links useful:

Here are even more suggestions. [with some overlap with above links]