CS 315 Homework 7 - Final Project
Due Date: Wed Dec 18 at 6:00pm
Overview
This last assignment will give you a chance to combine the skills and concepts we've discussed throughout the semester, and to explore in more depth some of the topics we've only lightly touched on. For this assignment, you will be completing a project of your own choosing. This project should either:
- Apply topics from class is a new way (not previously covered by homeworks)
- Apply topics from class that have not been previously covered by homeworks
- Further explore a relevant topic that has not been covered in class
Your project should be about the same "scope" as one of the later assignments (e.g., Homework 4, 5, or 6), in terms of size and effotr.
In addition to your completed impementation, you will also need to include a two-page write-up detailing your project and discussing any new concepts or techniques you utilized.
Note that for this project you are welcome to work either individually or in pairs--note that a pair project should be more involved than an individual project.
Objectives
- Apply concepts from the course in a new context
- Practice implementing a computer graphics based project from scratch
- Synthesize multiple topics from the course and/or explore a single topic in more detail
Project Ideas
Below are number of ideas for appropriate projects. You are welcome to choose one of these, or come up with your own idea. Note that in either case, you will need to have your project approved by the professor (see the bottom of the section).
-
Interactive Virtual World
You can take the scene you rendered for Homework 5 (or at least the "rendering engine") and extend it to include further interactivity. For example, you might extend the program into a game of some kind, allowing the user to walk around (move the camera) or otherwise control an avatar to explore your scene.
Note that your game should look good. Use multiple light sources (carefully organized!) and correctly textured models. Try to come up with a definite aesthectic for your game, and make sure your project looks how you intend! This means you likely will need to modify your GLSL shaders and possibly even your mesh loaders to better support complex rendering and interactivity.
-
Advanced Ray Tracing
Extend your Ray Tracing engine so it supports further effects. You might add refractions in order to have transparent objects. You could add further primitive surfaces and the ability to define Constructive Solid Geometry. You could add distributed ray tracing effects, such as soft shadows, depth of field, or anti-aliasing. Note that your ray tracer will need to include multiple of these effects--two or three is a good number (depending on their complexity)
You may also want to extend the scene parser so that your Ray Tracer is able to render multiple given scenes; this will make it easier to test and demonstrate your program!
-
Real-Time Ray Tracing
Enable your Ray Tracing to run on Android devices in reasonable time by converting your code to run in GLSL. This will allow you to process rays on the GPU, letting you parallelize the process. To do this you will likely need to abandon your object-oriented approach to some extent. Also note that because ray tracing relies on the whole scene, in effect your scene will need to be stored as a
uniform
that the fragment shader can access. There may be other ways to pass in such information--for example, by buffering scene data in a texture. Further explanations may be found online. -
Curve Demo Applet
Develop an applet that can be used to demonstrate the creation and manipulation of curves to future students. This applet should allow the user to create new Bezier Curves, B-Splines, and NURBS (and possibly others, such as Hermite Cuves) by clicking on particular spots to add control points. The user should be able to drag created points around (deleting points would also be helpful). Your program should support curves of any dimension--with any number of control points. For B-Splines, the user should also be able to control the knot vector in order to create non-uniform rational B-Splines.
Further details will also help demonstrate the concepts: the user should be able to "scrub" through de Casteljau's algorithm to see how the curve is constructored. Being able to graph the basis functions would also be a welcome addition. You can look at the applets linked in the lectures for examples of interfaces, as well as the numerous other curve applets available online. Coming up with a polished applet would be highly useful for future classes--we could even make it available online so that people outside the class may use it :)
For extra challenge: also support defining surfaces!
-
Bi-Directional Reflectance Distribution Functions
Create a rendering program (either an update to your OpenGL scene or to your Ray Tracer) that supports BRDFs. This will allow you to create highly realistic looking materials. You can find example BRDF functions from the MERL Database or elsewhere online.
-
Binary Space Partitions
Implement a demonstration of a BSP tree. You will need to create a "scene" of objects, calculate their division, and then graphically show this division and how to navigate the tree. Run benchmarks to demonstrate the speed benefits of using such a search tree. You should implement this in Android to really see how it speeds up searching.
Alternatively, you could modify your Ray Tracer so it supports using a BSP and make it run much faster. If you do this, you should also find another enhancement to add to your Ray Tracer to make sure the assignment stays in scope
-
Porting GLES
Re-implement a previous OpenGL homework (such as your Scene Renderer) in a separate development environment--for example, porting to iOS or WebGL. This will involve learning about and practice using the user interface elements of your target environment. As such, you should make sure to include some level of interactivity with your OpenGL program--such as buttons, drags, zooms, etc.
This is only a list of ideas I've come up with; other topics may also be acceptable--be sure and check with me!
Once you have chosen a project, you will need to get your choice approved by the professor before you begin. Complete the Moodle "Quiz" describing who you will be working with (if anyone) and what project you will be completing. (Note we're just using the quiz tool--it is not actually a test). Include as much detail as possible. I will "grade" and respond your project idea with either an approval (and possibly suggestions!) or with a request for revision. Once your project has been approved, your good to start.
You must have submitted your project idea by Tuesday, Nov 26 at 11:59pm. (I know there is another homework due then and it's the start of break, but I want to make sure you know what you're doing before you leave).
- Note that only one member of each team needs to submit this proposal
Submitting
BEFORE YOU SUBMIT: make sure your code is fully functional, but also documented and readable. As usual, grading will be based primarily on functionality. I won't be able to find errors in your code, so if I can't run it, then you didn't complete it! But I will look over your code to explore your implementation, so please make sure that it is readable :)
In addition to your implemented project, you must also include a two-page write-up of your project. This write-up (similar to a README file) should do two things:
- Give a brief overview of your project. Explain what you did, how your program works, etc. Give me some context for your work.
-
Include a overview and explanation of the concepts you used in your program, particularly any new concepts. For example, if you made an Interactive Virtual World, you should include an explanation of the forms of interactivity and the controls you implemented. If you wrote a Curve Applet, you should include an explanation of what the curves are and how your algorithm works.
- This paper should basically summarize the concept, almost like a section of a textbook or an encyclopedia (that you wrote yourself, not cribbed from Wikipedia). Imagine that you are giving this project to a brand new graphics student as a demonstration of a concept--your write-up should explain the idea well enough for them to understand what your program is and how it works
- Write as if you were teaching the concept to someone else! Give as detailed an explanation as you can. This write-up should demonstrate your understanding and mastery of the topics you utilized in your application.
Upload your project AND the write-up to the Hwk7 submission folder on hedwig.
The project is due at 6pm on Wed, Dec 18. This is the end of our final exam time period--we will discuss any plans for that time during lecture.