Assignments
A few of the assignments, below, might be changed.
Assignments will be submitted on the "Assignments" link on
CS171 2024 on Canvas. You may need to open this
Canvas link in a new tab, say with middle click on some computers.
Or you may need to cut and paste the following Canvas link
manually:
https://caltech.instructure.com/courses/7613/assignments
Use the "Home" link on Canvas to see the top Canvas view of the course, or click on the Syllabus.
Here are the Assignments:
- Assignment 0:
Environment Setup and Intro. Due Wednesday week 2, 2024 at
3:00 PM
This is a relatively straightforward assignment that introduces
some utilities and common functions
that you will need to use and write (respectively) for later
assignments in the course. For the most part,
this assignment requires only your prerequisite C/C++ knowledge
and general programming experience. This
assignment consists of four (short) parts plus an initial part
where we ask you to set up your programming environment
for the class:
- Set up your programming and OpenGL environments. See
this
page
for installation instructions.
- Parse simple .obj files.
- Work with geometric transformations and the C++ matrix
library, Eigen.
- Parse a file format that has both .obj data and
transformation data.
- Output an image in the Portable Pixel Map (PPM)
format.
Due Wednesday week 2, 2024 at 3:00 PM
- Assignment 1:
Graphics Pipeline - Wireframe Rendering
Due Wednesday 3pm Week 3. This assignment has you implement the graphics pipeline for
rendering 3D wireframe models as a C++ program that parses in
scene descriptions from file input and outputs images of
specified wireframe models in the scene.
Lecture notes for this assignment can be found here.
The assignment covers the following topics:
- Geometric Transformations (Translation, Rotation, and Scaling)
- Transformations as Matrix Operations
- World and Camera Coordinate Spaces
- Perspective Projection and Normalized Device Coordinates (NDC)
- Line Rasterization using Bresenham's Line Drawing Algorithm
Due Wednesday Week 3, 2024 at 3:00 PM
- Assignment 2: Graphics Pipeline - Shaded Surface Rendering
Due Wednesday 3pm Week 4. This assignment has you implement the graphics pipeline for rendering 3D shaded surfaces as a C++ program that parses in scene descriptions from file input
and outputs images of specified shaded surfaces in the scene.
Lecture notes for this assignment can be found here.
The assignment covers the following topics:
- Interpolation across a triangle using Barycentric Coordinates
- Triangle Rasterization using Barycentric Coordinates
- Surface Normals in the discrete setting as Vertex Normals
- The Lighting Model (aka the Phong Reflection Model)
- The Gouraud and Phong Shading Algorithms
- Backface Culling and Depth Buffering
Due Wednesday Week 4, 2024 at 3:00 PM
- Assignment 3: Intro. to OpenGL and the Arcball
This assignment introduces you to OpenGL by having you recreate the 3D shaded surface renderer within an OpenGL context.
You will also implement the Arcball mouse UI to allow user interaction with the rendered scenes.
Lecture notes for this assignment can be found here.
The assignment covers the following topics:
- OpenGL (The Open Graphics Library)
- The Arcball
- Quaternions for spatial rotations
- Implementing the Arcball with Quaternions
Due Wednesday Week 5, 2024 at 3:00 PM
- Assignment 4: Intro. to GLSL and Texturing
This assignment has you update your OpenGL renderer from Assignment 3 to include GLSL shaders and texturing.
Lecture notes for this assignment can be found here.
The assignment covers the following topics:
- GLSL (The OpenGL Shading Language)
- Phong Shading (aka Per Pixel Lighting) in OpenGL
- Texture Mapping
- Normal Mapping
Due Wednesday Week 7, 2024 at 3:00 PM
- Assignment 5: Intro. to Geometry Processing - The Discrete Laplacian and Implicit Fairing
This assignment introduces you to various key concepts from the areas of geometry processing and discrete differential
geometry by having you implement a technique for smoothing meshes known as implicit fairing.
Lecture notes for this assignment can be found here.
The assignment covers the following topics:
- The Halfedge Data Structure
- Computing Vertex Normals using the Halfedge
- Poisson Equations in Computer Graphics
- An Overview of the Discrete Laplacian Operator
- Eigen's Sparse Matrix Library and Sparse Solver
- Building Sparse Matrix Operators
- Solving Non-linear Sparse Matrix Equations with a Solver
Due Wednesday Week 8, 2024 at 3:00 PM
- Assignment 6: Intro. to Simulation and Animation - The Discrete Lagrangian and Splines
This assignment introduces you to various key concepts from the areas of physical simulation and computer animation.
In regards to simulation, the assignment has you derive symplectic integrators for three physical systems using ideas
involving the Discrete Lagrangian. In regards to animation, the assignment has you write two programs that use splines to
interpolate across given keyframes.
Lecture notes for this assignment can be found here.
The assignment covers the following topics:
- Time Integration
- Variational and Symplectic Time Integrators
- The Discrete Lagrangian
- The Discrete Euler-Lagrange (DEL) Equations
- Keyframe Interpolation
- Splines: Cardinal and Catmull-Rom Splines
- B-splines and NURBS
Due Wednesday week 9, 2024 at 3:00 PM
- Assignment 7: Intro. to Ray Tracing (Part 1 and Part 2)
Part 1 is due Wed December 4, 2024, and Part 2 is due Friday
December 11th, 2024. (Since the final grades are due a few days later,
extensions beyond December 11 will not be feasible.)
In this assignment, you will be introduced to the concept of ray
tracing, a rendering method to handle different lighting aspects
such as shadowing, reflections, and refraction. You will be filling
in parts to a rendering pipeline that will be rendering implicit
surfaces known as superquadrics.
The assignment will require you to become familiar with a command-line
tool we provide you, along with a small codebase that you will want to
look through.
FYI, there previously were two versions of the assignment. You should
use the updated version, which had been
called Version A. (The previous version, which we called Version B,
has been removed.)
- Link for Version
A
Along with the tools we provide, we also provide a Version
A framework README to help you understand what is happening here
Lecture notes for Version A of this assignment can be found here.
Again, Part 1 is due Wednesday December 4th, 2024 and Part 2 is due Friday
Dec 11th, 2024 (And no extensions on Part 2 - we need time to
grade!)