A simple game engine as a learning project to discover different areas of Computer Science such as Computer Graphics, Optimization, Audio, etc., and to practice different techniques in Software engineering.
- Language: C++
- Build tools: Clang, CMake, vcpkg, Doxygen
- Libraries: see
vcpkg.json - Testing library: Googletest
- Scene & node
- Each scene is a seperate map/level
- Each scene has a Node-tree
- Each scene has its own ECS system
- Rendering
- Orthographic & perspective cameras
- Importing meshes
- Material system
- Phong model
- PBR
- Texture mapping
- Normal mapping
- Lighting
- Directional light
- Point light
- Spot light
- Shadow mapping
- Audio
- Physics
- Interactive editor
- Serialize & deserialize
- Scripting
- Input handling
- Networking
📋 Prerequisites
- CMake >= 3.25.0
- Ninja build system
- Git
- Clang compiler
🛠️ Build
Clone the project
git clone --recurse-submodules https://github.com/duc0905/BoredGameEngine.gitGo to the project directory
cd ./BoredGameEngineConfigure the build system. Vcpkg will automatically download the dependencies in this step, so it might take a few minutes.
cmake --preset baseBuilding CMake targets
cmake --build --preset buildCurrently, there are 3 targets:
- Engine - the static library containing core engine code
- Directory: build/base/Engine/Engine.lib
- demo1 - the simple demo using the core functions of the engine
- Directory: build/base/demo/demo1/demo1.exe
- demo2 - user-defined components and services demo
- Directory: build/base/demo/demo2/demo2.exe
Use the custom CMake target to generate documentation using Doxygen:
cmake --build --preset build --target gen_docThe html documentation will be at ./build/base/docs/html/index.html.
Once built, you can link the static library and use the header files in the Engine to your libraries and/or executables.
See demo folder.
Contributions are always welcome! Since this is my personal project and I would prefer implementing myself, I would love to receive suggestions and/or guidance on new ideas, feature, or bugs for the project. However, you are free to work on a copy of the project for your own.