See also the list of Prerequisite topics.

### Rendering: 2D pictures from 3D models

#### Rendering a surface

#### Rendering meshes

- model object as a mesh of triangles in 3D
- project 3D triangles into 2D
- shading and texturing

#### Framebuffers

- Abstract display device
- Array of ((r,g,b)) for color
- Generalized to e.g. depth buffer, texture map

#### 3D models

- collections of triangles in 3D

#### Projection

- mapping 3D triangles into 2D

#### Rasterization

- converting 2D triangles into pixels

### OpenGL

#### GLSL

- c like programming language
- vector and matrix operations
- implicit parallelism

#### WebGL pipeline

#### Vertex Shaders

- drawing triangles

#### Fragment Shaders

- colouring pixels

### Basics of Interactivity

#### Animation via redraws

#### Event handlers

#### Asynch IO

### Linear algebra for graphics

#### inner and cross product

- see also surface normals

#### Coordinate systems and bases

#### Homogeneous coordinates

- see also perspective viewing

#### Transformations via matrix multiplication

### Geometry for graphics

#### Parametric equations

- lines
- planes
- spheres, cylinders

#### Intersection detection

- Intersections of planes
- Barycentric coordinates
- intersection of triangles with planes :clipping:

#### Transformations

- translation
- rotat

### Surface Normals

- see also shading, cross product

### Geometric Pipeline

#### Projection

- parallel projection
- perspective projection
- View Frustum
- Camera transformation

#### Clipping

- clipping triangles
- where in the pipeline to clip

#### Culling

- culling triangles
- culling bounding volumes

### Pixel/Fragment Pipeline

#### Textures

- Linear interpolation
- Texture arrays (2D)
- Perspective correction
- Noise (optional)

#### Shading

- Global / Ambient
- Lambertian / Diffuse
- Blinn-Phong / Specular
- Custom: spotlight, etc…

#### Shadows

- Shadow maps
- Shadow volumes (stencil buffer)

### 3D Modelling

#### Intersection detection

- Intersecting lines with planes :clipping:
- Intersecting lines with spheres :bounding:

#### Hierarchical Models

- optional

#### Bounding Volumes

- optional