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:
- you can do modeling in Maya/Max/LightWave etc. and output .obj geometry, and use a parser to read them into your OpenGL program. Here are two parsers for you to consider, for reading .obj meshes (either one will work, for reading in tris and quads).
- use of image-reading calls from libraries is fine (for bringing in texture maps, in TIFF, JPG, PNG, TGA, PPM etc. formats)
- using a widget library such as FLTK is fine (to create fancy UI components with buttons, sliders, option menus, etc.)
- audio: you can include simple audio in your program if you want
These are NOT allowed:
- physics "middleware"
- AI middleware
- game engine libraries
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:
- program features/performance/design
- presentation
- extra features
- ingenuity [this is highly subjective!]
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:
- your source files (including any headers), and lib files if any. Basically we need to be able to run your program in a 'clean' machine. Note - you don't need to include any OpenGL headers/libs in your submission.
- README file, which should include names of team members, 10 digit school IDs and email addresses
- instructions on how to compile and run your code
- project document which should include design considerations, implementation details, problems (if any) encountered, ideas for future [this document could be the same one you'll be presenting 'live', or it can be different ie. with more info., diagrams, etc.]
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.
- put up HTML/Powerpoint/PDF slides, talk about your design, implementation, challenges, extensions
- OK to do the demo during the talk (they don't have to be two separate things)
- demo: show (off) salient features first, then the extra 'icing on the cake' ones
- if you are going to demo. using your own laptop (HIGHLY recommended!), bring your own monitor (video-out) cable as well
- you have a maximum of six minutes to do your talk/demo. PLEASE stick to the time limit! It might be worth doing practice runs to ensure this.
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.
- Quaternion Julia set
- Menger sponge, 3D
- Sierpinski tetrahedron
- Stellated polyhedra
- Origami models
- Knots/braids
- Analytical mathematical surfaces, eg. Boy's surface, Costa's minimal surface.
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:
- blurring
- contrast enhancement
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:
- http://www.cs.berkeley.edu/~sequin/SCULPTS/sequin.html
- http://www.bathsheba.com/math
- http://emsh.calarts.edu/~mathart/
- http://www.rogmann.org/math/diplom/
- http://torus.math.uiuc.edu/jms/Photos/MathArt/
- http://astronomy.swin.edu.au/~pbourke/surfaces/
- http://www.xs4all.nl/~wolter/index.html
- http://www.kabai.hu/
- http://www.cs.technion.ac.il/~gershon/EscherForReal/
- http://www.helasculpt.com/