Alexander Aseme
GitHub IconLinkedIn Icon

Simplified Game Engine

Over the course of the semester, this project involved building a simple 3D game engine in C++ using Direct3D 11. The engine supports textured 3D objects, z-buffering, real-time lighting, animations, models, collision detection, and post-processing effects like bloom. Each lab built incrementally upon the previous one—starting with triangle rendering and culminating in environment interaction and effects rendering. Multiple shader programs were implemented in HLSL, including mesh shaders, normal mapping, and lighting models.

The engine was developed through eleven cumulative lab assignments as part of a college course. Each module layered new functionality over a rendering framework, ranging from basic vertex processing to skinned animation, lighting pipelines, and post-processing effects. A custom math library was developed for transformations, and an SIMD-optimized version was written separately. The final lab integrated bloom using additive blending and Gaussian blur across downsampled framebuffers. Collision detection was implemented with AABBs, and a multithreaded job system allowed asynchronous processing of tasks like culling and animation.

Key Features

  • Textured 3D mesh rendering with per-object material parameters
  • Depth-based visibility using z-buffering
  • Real-time Phong lighting (ambient, directional, specular)
  • Hierarchical animation system with skinning support
  • Tangent-space normal mapping
  • Collision detection with bounding boxes and raycasting
  • Post-processing bloom effect using Gaussian blur

Technical Details

  • Rendering API: Direct3D 11
  • Language: C++
  • Special Skills: SIMD, writing shaders in HLSL, parallel programming

Project Demo