CS 5620: Computer Graphics

OpenGL Renderer

In this assignment you will replace your software renderer with an OpenGL version.

An example of the fourth assignment is posted here:

assignment4-osx.zip
assignment4-linux64.tar.gz

If you did not finish assignment 3, you may start from the assignment 3 solution that will be posted here:

git clone https://github.com/cornell-cs5620/assignment3.git

Requirements

Your assignment is to use OpenGL for rendering. Your tasks are as follows:

  • Create a fork of your project, you don't want to lose all your work from assignments 1, 2, and 3!
  • add the remote repository to your newly forked repo and pull from that new remote
git remote add opengl https://github.com/cornell-cs5620/opengl_skeleton.git
git pull opengl master
  • This will remove the canvas from your program and restructure things a little bit. You will need to resolve any conflicts.
  • Replace any calls to the software renderer with calls to OpenGL so that your program is exclusively using OpenGL to render everything.
  • Create five different shaders: solid white with no lighting for rendering boundaries and normals, a solid color with gouraud lighting, a solid color with phong lighting, any non-uniform material, and any textured material.
  • For extra credit, you may add more shaders: Vertex animation, volumetric turbulence, normal mapping, environment mapping, toon shading, silhouette rendering, color animation, or anything else that you can think of.

Submission

The submission deadline is November 25rd 2015 at 10:00am. Submission involves a face-to-face session with Ned. We will schedule timeslots for the sessions, which will last up to 20 minutes, during which you will present your work and answer questions. Your grade, which is 20% of your final course grade, will reflect your effort in solving the problems posed by the assignment in terms of software engineering, performance, and completeness.

Grading

You will be graded on your implementation of the five shaders and the conversion to OpenGL. The grade for each is split into three: Correctness, Performance, and Readability. A good score in Correctness means that you implemented the correct algorithm, all of the corner cases for the algorithm are covered and the algorithm has no errors. A good score in Performance means that you took the time to optimize your code, it runs decently fast on an i7, and there is no glaring issue (like a recursion depth of hundreds of thousands). A good score in Readability means that your code is well architected, is easy for me to read and is well documented. The grading rubric will be posted upon assignment.

CorrectnessReadabilityTotal
Transformations18%7%25%
Geometry18%7%25%
Shaders18%7%25%
Texture Mapping18%7%25%
Total72%28%100%

Final Notes

  • DO NOT use any external code or borrow code from friends, family or colleagues without permission. If in doubt, please contact Ned. If you do use external code - please cite the source clearly. Plagiarism of any kind will not be tolerated!
  • You are welcome and encouraged to experiment with your program and add features. Previous experience shows this assignment can be addicting! Impressive extra features can earn you a bonus in your grade.
  • You have ample time to complete this exercise, but do not wait until the last moment. You are strongly encouraged to start working on it immediately.
  • We are aware that this assignment can be intimidating, and possibly one of the largest assignments you will encounter during your studies. You are welcome to come ask us if anything is not clear. We will periodically publish hints and advice on the Web site and by email.