# Gedeng Game engine snippets for the university course Game Engine Design (GED) with rendering functionality for Shader Programming (SPG). ## Building Run `scons` in the root directory. This will generate two things: 1. the shared library in `lib/` 2. test binaries in `test/bin/` which use the library created in step 1 ### Full Demo Binary Among the generated test binaries is the `full-demo.out` which tests all SPG-related functionality: - 3D Texture: a volume is rendered using the Marching Cubes technique. Moving up and down offsets it vertically. - Bump Mapping: the ground texture is seemingly 3-dimensional thanks to bump mapping. 5/6 and 7/8 can be used to set the steps and refinement steps respectively. 9/0 sets the depth. - GPU Particle System: the fireworks can be positioned by clicking the ground. 1/2 changes the update rate interactively. - Soft Shadows: Variance Shadow Mapping smoothes out the shadows and prevents issues such as shadow acne. - Tessellation: demonstrated by the little quad with terrain on it. 3/4 sets the tessellation factor. General input: WASD and mouse for movement, X to enable wireframe rendering. ## Developing The `scons` command also generates a `compile_commands.json` which can be used by the VSCodium extension `clangd` for autocompletion, debugging, etc. Build and run scripts for VSCodium are provided as well. ## Credits Catch2 for unit tests: https://github.com/catchorg/Catch2 Base structure inspired by TheCherno's Hazel Engine series: https://github.com/TheCherno/Hazel Some shader-related code adapted from LearnOpenGL: https://learnopengl.com/