- Cross-platform project configuration using CMake (Windows, macOS, Linux/Ubuntu)
- Lua scripting
- Game settings
- Rasterizing lines using Bresenham's line algorithm
- Linear interpolation (lerping)
- OBJ file loading
- Basic vertices and faces
- 3D mesh data structures
- Vertex/Face
- Rendering a mesh in wireframe mode
- Rasterizing triangles using old-school "line sweep"
- Math library
- Vectors
- Component-wise addition, subtraction, multiplication, division
- Dot product
- Magnitude
- Normalizing
- Vectors
- Flat shading
- Gouraud shading
- Gamma correction
- Hidden faces removal via Z-Buffer
- Texture mapping
- Barycentric coordinates
- Triangle rasterizing
- Z-buffer interpolation
- Templated math library for applicable elements
- Vectors
- Matrics
- Matrices
- Addition, subtraction, multiplication
- Determinant
- Identity
- Inverse
- Orthogonal matrix inverse
- Projections
- Perspective
- Camera
- Perspective projection
- Transformations
- Translation
- Rotation
This serves as a high-level TODO list, in no particular order.
- Primitive 3D objects
- Cube
- Sphere
- Plane
- Axis-aligned bounding box (AABB)
- Camera
- View frustum culling
- Triangle clipping
- Projections
- Orthographic
- Axonometric
- Isometric
- Dimetric
- Trimetric
- Matrices
- Inverse
- Quaternions
- Transformations
- Translation
- Scaling
- Rotation
- Reflection
- Shearing
- Scene graph of objects
- Barycentric coordinates
- Shaders
- Vertex shaders
- Fragment/Pixel shaders
- Rays
- Anti-aliasing
- Perspective correct interpolation
- Phong shading
- Normal mapping
- Object space
- Tangent space
- Shadows
- Hard
- Soft
- Ambient Occlusion
- Skybox
- GUI
- Slider
- Dropdown menu
- Animation
- Lua scripting
- Scene definition
Crown jewel, if I get far enough:
- Water rendering
- Flat
- Waves
- Physically-Based Rendering (PBR)