Our assignment for the Computer Graphics unit. We were tasked to develop a 3D rasteriser and raytracer in C++ using the SDL and GLM libraries to create a 10-second animation using a pre-given OBJ file. We were given a list of features to implement, listed below. We submitted three animation videos, the first in wireframe mode, the second rendered using our shaded triangle rasteriser, and the final using our raytracer (which has the most features). Our raytracer animation is displayed in the GIF below.
- # = not mandatory to move to next range
- Bold = done, italics = sort of
- OBJ loading (geometry and materials)
- Wireframe rendering
- Flat shaded rasterising
- Moving camera (position only)
- Saving of PPM files
- Changing camera orientation (via orientation matrix)
- LookAt
- Some form of generative geometry #
- Ambient lighting
- Diffuse lighting (proximity and angle-of-incidence)
- Hard Shadow
- Gouraud shading
- Naive (non-perspective corrected) texture mapping
- Simple animation (e.g. fly-through)
- Some form of Physics (gravity, friction, bounce etc) #
- Basic culling (far-plane, near-plan, back-face)
- Basic anti-aliasing #
- Phong Shading
- Fairly “interesting” materials (e.g. mirrors)
- Complex anti-aliasing
- Perspective corrected texture mapping
- “Fancy” animation
- Soft shadow
- Bump maps
- Basic clipping (bounding box)
- Environment maps
- Complex “interesting” materials (e.g. glass)
- Line drawing optimisations (e.g. Bresenham)
- Advance clipping (frustum)
- Photon maps and caustics
- “Intelligent” model simplification