Assignments will be submitted on
** 2019
CS171 on Moodle ** ... You may need to open the previous
Moodle link in a
new tab, or cut and paste the following link
** https://courses.caltech.edu/course/view.php?id=3537 **

Please enroll yourself with the Moodle enrollment key given in class.

**Assignment 0: Environment Setup and Intro. Due Wednesday Oct. 9, 2019 at 3:00 PM**- 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.
**Assignment 1: Graphics Pipeline - Wireframe Rendering**- 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
**Assignment 2: Graphics Pipeline - Shaded Surface Rendering**- 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
**Assignment 3: Intro. to OpenGL and the Arcball**- OpenGL (The Open Graphics Library)
- The Arcball
- Quaternions for spatial rotations
- Implementing the Arcball with Quaternions
**Assignment 4: Intro. to GLSL and Texturing**- GLSL (The OpenGL Shading Language)
- Phong Shading (aka Per Pixel Lighting) in OpenGL
- Texture Mapping
- Normal Mapping
**Assignment 5: Intro. to Geometry Processing - The Discrete Laplacian and Implicit Fairing**- 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
**Assignment 6: Intro. to Simulation and Animation - The Discrete Lagrangian and Splines**- 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
**Assignment 7: Intro. to Ray Tracing**

This is a relatively straightforward assignment that introduces some utilities and common functions that you will use and write (respectively) for the 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:

**Due Wednesday Oct. 9, 2019 at 3:00 PM**

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:

**Due Wednesday Oct. 16, 2019 at 3:00 PM**

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:

**Due Wednesday Oct. 23, 2019 at 3:00 PM**

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:

**Due Wednesday Oct. 30, 2019 at 3:00 PM**

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:

**Due Wednesday Nov. 6, 2019 at 3:00 PM**

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:

**Due Wednesday Nov. 20, 2019 at 3:00 PM**

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:

**Due Wednesday Nov. 27, 2019 at 3:00 PM**

In this assignment, you will be introduced to the concenpt of ray tracing, a rendering standard 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 get familiar with a command-line tool we provide you along with a small codebase that you will want to look through. Along with the tools we provide, we also provide a framework README to help you understand what is happening here

Lecture notes for this assignment can be found here.

**Due Wednesday Dec 4th and Due Wednesday Dec 11th, 2019 at 3:00 PM (No extensions on Part 2 - we need time to grade)**