├── .gitignore ├── .gitmodules ├── README.html └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files 2 | *.slo 3 | *.lo 4 | *.o 5 | *.obj 6 | 7 | # Precompiled Headers 8 | *.gch 9 | *.pch 10 | 11 | # Compiled Dynamic libraries 12 | *.so 13 | *.dylib 14 | *.dll 15 | 16 | # Fortran module files 17 | *.mod 18 | *.smod 19 | 20 | # Compiled Static libraries 21 | *.lai 22 | *.la 23 | *.a 24 | *.lib 25 | 26 | # Executables 27 | *.exe 28 | *.out 29 | *.app 30 | 31 | *.un~ 32 | *.swo 33 | *.swp 34 | .DS_Store 35 | */* 36 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "shared"] 2 | path = shared 3 | url = https://github.com/alecjacobson/computer-graphics-shared 4 | -------------------------------------------------------------------------------- /README.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 |
14 | \(\newcommand{\A}{\mat{A}}\) 15 | \(\newcommand{\B}{\mat{B}}\) 16 | \(\newcommand{\C}{\mat{C}}\) 17 | \(\newcommand{\D}{\mat{D}}\) 18 | \(\newcommand{\E}{\mat{E}}\) 19 | \(\newcommand{\F}{\mat{F}}\) 20 | \(\newcommand{\G}{\mat{G}}\) 21 | \(\newcommand{\H}{\mat{H}}\) 22 | \(\newcommand{\I}{\mat{I}}\) 23 | \(\newcommand{\K}{\mat{K}}\) 24 | \(\newcommand{\L}{\mat{L}}\) 25 | \(\newcommand{\M}{\mat{M}}\) 26 | \(\newcommand{\N}{\mat{N}}\) 27 | \(\newcommand{\One}{\mathbf{1}}\) 28 | \(\newcommand{\P}{\mat{P}}\) 29 | \(\newcommand{\Q}{\mat{Q}}\) 30 | \(\newcommand{\Rot}{\mat{R}}\) 31 | \(\newcommand{\R}{\mathbb{R}}\) 32 | \(\newcommand{\S}{\mathcal{S}}\) 33 | \(\newcommand{\T}{\mat{T}}\) 34 | \(\newcommand{\U}{\mat{U}}\) 35 | \(\newcommand{\V}{\mat{V}}\) 36 | \(\newcommand{\W}{\mat{W}}\) 37 | \(\newcommand{\X}{\mat{X}}\) 38 | \(\newcommand{\Y}{\mat{Y}}\) 39 | \(\newcommand{\argmax}{\mathop{\text{argmax}}}\) 40 | \(\newcommand{\argmin}{\mathop{\text{argmin}}}\) 41 | \(\newcommand{\c}{\vec{c}}\) 42 | \(\newcommand{\d}{\vec{d}}\) 43 | \(\newcommand{\e}{\vec{e}}\) 44 | \(\newcommand{\f}{\vec{f}}\) 45 | \(\newcommand{\g}{\vec{g}}\) 46 | \(\newcommand{\mat}[1]{\mathbf{#1}}\) 47 | \(\newcommand{\min}{\mathop{\text{min}}}\) 48 | \(\newcommand{\n}{\vec{n}}\) 49 | \(\newcommand{\p}{\vec{p}}\) 50 | \(\newcommand{\q}{\vec{q}}\) 51 | \(\newcommand{\r}{\vec{r}}\) 52 | \(\newcommand{\transpose}{{\mathsf T}}\) 53 | \(\newcommand{\tr}[1]{\mathop{\text{tr}}{\left(#1\right)}}\) 54 | \(\newcommand{\t}{\vec{t}}\) 55 | \(\newcommand{\u}{\vec{u}}\) 56 | \(\newcommand{\vec}[1]{\mathbf{#1}}\) 57 | \(\newcommand{\x}{\vec{x}}\) 58 | \(\newcommand{\y}{\vec{y}}\) 59 | \(\newcommand{\z}{\vec{z}}\) 60 | \(\renewcommand{\v}{\vec{v}}\) 61 |
62 | 63 |

Computer Graphics Course

64 | 65 |

Course material for an undergraduate level course in computer 66 | graphics

67 | 68 |

Course designed by Prof. Alec Jacobson, 69 | David I.W. Levin and Karan Singh from University of Toronto, with assistance 70 | from Yotam Gingold at GMU.

71 | 72 |

Prerequisites and dependencies

73 | 74 |

In general, the materials in this course assume that students should have 75 | already taken Linear Algebra and Calculus.

76 | 77 |

Students should have already taken Introduction to Computer Science and should 78 | be proficient in computer programming (in any language) and should feel 79 | comfortable programming in C++.

80 | 81 |

Some coding assignments make use of 82 | Eigen, an open-source 83 | linear algebra library; and libigl, an 84 | open-source geometry processing library. Each assigment is built using 85 | CMake.

86 | 87 |

Organization

88 | 89 |

The course is structured to run with fast paced weekly assignments in the 90 | following order:

91 | 92 |
    93 |
  1. Introduction & Raster Images
  2. 94 |
  3. Ray Casting
  4. 95 |
  5. Ray Tracing
  6. 96 |
  7. Meshes
  8. 97 |
98 | 99 |

There is a slight dependence to these assignments:

100 | 101 | 106 | 107 |

Each topic has its own git repository. Inside each, there is a README.md file 108 | contains background information necessary for understanding the topic’s coding 109 | assignment.

110 | 111 |

The 112 | Introduction 113 | README.md contains detailed information about compilation, file layout and 114 | assignment protocols.

115 | 116 |

Textbook

117 | 118 |
119 | The Book. 120 |
The Book.
121 |
122 | 123 |

These assignments were prepared to closely follow:

124 | 125 |

Fundamentals of Computer Graphics, Fourth 126 | Edition, Steve Marschner, Pete Shirley, 127 | et al. 2015.

128 | 129 |

Wikipedia

130 | 131 |

The background materials link heavily to Wikipedia articles. Sometimes the 132 | wikipedia articles relating to geomtry processing are less informative than they 133 | could be. Edit them!

134 | 135 |

In university offerings of this course, 5% credit has been awarded to the entire 136 | class for collaboratively improving Wikipedia’s entries on geometry processing 137 | topics.

138 | 139 |

Are you an instructor?

140 | 141 |

There are instructor repositories for all of the assignments above. If you’re an 142 | instructor for a geometry processing course, send an email to 143 | jacobson@cs.toronto.edu for an invitation.

144 | 145 |

Corresponding solution/instructor (private) repos are located at:

146 | 147 |
    148 |
  1. Pre test
  2. 149 |
  3. Introduction & Raster Images
  4. 150 |
  5. Ray Casting
  6. 151 |
  7. Ray Tracing
  8. 152 |
153 | 154 | 155 | 156 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Computer Graphics Course 2 | 3 | Course material for an undergraduate level course in [computer 4 | graphics](https://en.wikipedia.org/wiki/Computer_graphics) 5 | 6 | Course designed by [Prof. Alec Jacobson](http://www.cs.toronto.edu/~jacobson/), 7 | David I.W. Levin and Karan Singh from University of Toronto, with assistance 8 | from Yotam Gingold at GMU. 9 | 10 | ## Prerequisites and dependencies 11 | 12 | In general, the materials in this course assume that students should have 13 | already taken **Linear Algebra** and **Calculus**. 14 | 15 | Students should have already taken **Introduction to Computer Science** and should 16 | be proficient in computer programming (in any language) and should feel 17 | comfortable programming in **C++**. 18 | 19 | Some coding assignments make use of 20 | [Eigen](https://en.wikipedia.org/wiki/Eigen_(C%2B%2B_library)), an open-source 21 | linear algebra library; and [libigl](http://libigl.github.io/libigl/), an 22 | open-source geometry processing library. Each assigment is built using 23 | [CMake](https://en.wikipedia.org/wiki/CMake). 24 | 25 | ## Organization 26 | 27 | The course is structured to run with fast paced _weekly_ assignments in the 28 | following order: 29 | 30 | 1. [Introduction & Raster Images](https://github.com/alecjacobson/computer-graphics-raster-images) 31 | 2. [Ray Casting](https://github.com/alecjacobson/computer-graphics-ray-casting) 32 | 3. [Ray Tracing](https://github.com/alecjacobson/computer-graphics-ray-tracing) 33 | 4. [Meshes](https://github.com/alecjacobson/computer-graphics-meshes) 34 | 5. [Boundary Volume Hierarchy](https://github.com/alecjacobson/computer-graphics-boundary-volume-hierarchy) 35 | 6. [Shader Pipeline](https://github.com/alecjacobson/computer-graphics-shader-pipeline) 36 | 7. [Kinematics](https://github.com/alecjacobson/computer-graphics-kinematics) 37 | 8. [Mass-Spring Systems](https://github.com/alecjacobson/computer-graphics-mass-spring-systems) 38 | 39 | There is a slight dependence to these assignments: 40 | 41 | - [Ray Casting](https://github.com/alecjacobson/computer-graphics-ray-casting) 42 | before [Ray 43 | Tracing](https://github.com/alecjacobson/computer-graphics-ray-tracing) 44 | 45 | Each topic has its own git repository. Inside each, there is a `README.md` file 46 | contains background information necessary for understanding the topic's coding 47 | assignment. 48 | 49 | The 50 | [Introduction](https://github.com/alecjacobson/computer-graphics-raster-images) 51 | `README.md` contains detailed information about compilation, file layout and 52 | assignment protocols. 53 | 54 | ## Textbook 55 | 56 | ![The Book.](https://www.cs.cornell.edu/~srm/fcg4/K22616_cover-300.jpg) 57 | 58 | These assignments were prepared to closely follow: 59 | 60 | [_Fundamentals of Computer Graphics, Fourth 61 | Edition_](https://www.cs.cornell.edu/~srm/fcg4/), Steve Marschner, Pete Shirley, 62 | et al. 2015. 63 | 64 | ## Wikipedia 65 | 66 | The background materials link heavily to Wikipedia articles. Sometimes the 67 | wikipedia articles relating to computer graphics are less informative than they 68 | could be. Edit them! 69 | 70 | ## Are you an instructor? 71 | 72 | There are instructor repositories for all of the assignments above. If you're an 73 | instructor for a geometry processing course, send an email to 74 | jacobson@cs.toronto.edu for an invitation. 75 | 76 | > For my reference, I can add a new instructor with github id `[githubid]` to all solution repos using: 77 | > 78 | > ``` 79 | > github-add-user -u alecjacobson -r $(echo alecjacobson/computer-graphics-{raster-images,ray-casting,ray-tracing,bounding-volume-hierarchy,meshes,shader-pipeline,kinematics,mass-spring-systems}-solution | tr ' ' ',') [githubid] 80 | > ``` 81 | 82 | ### Corresponding solution/instructor (private) repos are located at: 83 | 84 | 0. [Pre test](https://github.com/alecjacobson/computer-graphics-pre-test) 85 | 1. [Introduction & Raster Images](https://github.com/alecjacobson/computer-graphics-raster-images-solution) 86 | 2. [Ray Casting](https://github.com/alecjacobson/computer-graphics-ray-casting-solution) 87 | 3. [Ray Tracing](https://github.com/alecjacobson/computer-graphics-ray-tracing-solution) 88 | 4. [Bounding Volume Hierarchy](https://github.com/alecjacobson/computer-graphics-bounding-volume-hierarchy-solution) 89 | 5. [Meshes](https://github.com/alecjacobson/computer-graphics-meshes-solution) 90 | 6. [Shader Pipeline](https://github.com/alecjacobson/computer-graphics-shader-pipeline-solution) 91 | 7. [Kinematics](https://github.com/alecjacobson/computer-graphics-kinematics-solution) 92 | 8. [Mass-Spring Systems](https://github.com/alecjacobson/computer-graphics-mass-spring-systems-solution) 93 | 94 | ## Future Assignments 95 | 96 | - Ambient Occlusion + Occluding Contours (Multipass rendering) 97 | - Boids 98 | - Rigid Body with contacts 99 | - Cloth Simulation 100 | - Physically Based Real-Time Rendering 101 | - Half-Edge Data-structre 102 | - 1D plotting (vector graphics line rasterization) 103 | - Path Tracing, BRDFs 104 | - Mesh Laplacians 105 | --------------------------------------------------------------------------------