\( \newcommand{\vecIII}[3]{\left[\begin{array}{c} #1\\#2\\#3 \end{array}\right]} \newcommand{\vecIV}[4]{\left[\begin{array}{c} #1\\#2\\#3\\#4 \end{array}\right]} \newcommand{\Choose}[2]{ { { #1 }\choose{ #2 } } } \newcommand{\vecII}[2]{\left[\begin{array}{c} #1\\#2 \end{array}\right]} \newcommand{\vecIII}[3]{\left[\begin{array}{c} #1\\#2\\#3 \end{array}\right]} \newcommand{\vecIV}[4]{\left[\begin{array}{c} #1\\#2\\#3\\#4 \end{array}\right]} \newcommand{\matIIxII}[4]{\left[ \begin{array}{cc} #1 & #2 \\ #3 & #4 \end{array}\right]} \newcommand{\matIIIxIII}[9]{\left[ \begin{array}{ccc} #1 & #2 & #3 \\ #4 & #5 & #6 \\ #7 & #8 & #9 \end{array}\right]} \)

Computer Graphics Final Project

You (and optionally, a partner) will create an interesting graphics scene that is either interactive (like a game) or animated (like a movie). You will demonstrate it in class during the last week of the semester. Your project should show as many as possible, but at least four of the major graphics concepts that you learned in the course, namely:

  1. modeling, particularly hierarchical
  2. material, lighting and shading
  3. changing camera position or shape
  4. curved lines or surfaces
  5. textures and texture-mapping
  6. transparency
  7. user interaction
  8. animation

While it would be hard to do everything on this list, you'd like to show a variety of skills. If you do an animation, the animation should have at least two independently moving objects (this could be two different arms of a robot, though).

Your project should go beyond the relatively simple examples we did for homework and in class, either in complexity or scope.

I'm happy to talk with you to help you explore ideas for your project or to entertain different project ideas!


In addition to the software you create and demonstrate, I would like you to create a simple webpage describing your project. (I'll link to these from the CS307 website.) Your webpage must have still pictures of the project (take some screenshots and make image files), converting them to PNG for display on a webpage of your creation, describing your project.

Many of you already know how to code in HTML. For those who don't, check out these lecture notes on HTML from the CS/MAS 115 course. That will be enough for the basic structure of your page, with pictures and paragraphs explaining what the pictures are. Images can be inserted onto a webpage with the <img> tag:

<img src="file.png" alt="short description of image">

You'll probably want to use PNG format, since you'll have a wide range of colors. Screenshots on the Mac automatically are saved as PNG, so that's easy. If you need any help, don't hesitate to ask!

Create a subfolder in your public_html folder for your project. Put all the files related to your project in there, unless you are linking to files using an absolute URL, like https://cs.wellesley.edu/~cs307/threejs/libs/three-r95.all.js or https://cs.wellesley.edu/~cs307/threejs/contrib/someonesObject.js.

Note that copying other people's files protects you from a subsequent change (unlikely, but possible) or deletion.

Finally, you must name your folder and HTML files for the project description and demo as follows:



It would be nice if the description linked to the demo.

Remember, this is in your public_html, not in your cs307-assignments folder. Your final version, due at the end of final exams, will be named cs307-graphics-project-final/project.html.

The supporting files can be named however you like. Make sure all the files are world-readable and that you test the URL above to make sure it works. You don't want to have trouble while demonstrating your awesome project.

Let me know if you have any difficulty, or ask a fellow student who knows HTML. This is not supposed to be an elaborate webpage. Please don't spend a lot of time on this; I just want a page that says "here's what I did", covering the features (see the list at the top of this page) that you demonstrated and maybe a few screenshots of really cool things.


Your presentation need not be long, 5-6 minutes is fine. You should provide a demo of the project, showing all the interesting and cool elements, describe any interesting aspects of the coding or modeling, and anything new you learned about along the way. I do not expect you to use slides for this presentation. It is ok to provide some text on your webpage, but you should mostly be showing your visual graphics application in the presentation.


As always, you should write code that works, is modular, has good style, and is well-documented. In addition, I'll grade your project partly on how creative and interesting it is. I'd like you to challenge yourselves and create something that you will be proud of. This judgment is not based on the size of the scene, number of objects, number of lines of code or anything simply quantitative. I'm looking for undertaking a challenge. Your project description should also make this clear. Feel free to consult with me on this.

Your presentation is not graded, but I expect you to do a good job.


See the course schedule for the due dates of the alpha and final versions of this project.

Once the alpha version has been submitted, please do not alter it. Create the final version as a copy of the alpha version, naming the final version as described above, and continue your work on the final version only. To avoid mistakes, I suggest removing write permission from the files in the alpha version (this statement is executed in Unix, on the CS file server):

chmod -R a-w ~/public_html/cs307-graphics-project-alpha/

The final version of the project in this class is due on the last day of final exams. This gives you the maximum time possible to make this project as good as you want it to be. These projects are always amazing; I'm looking forward to seeing them!