Lumi is a C++ project designed for rendering intricate 3D scenes with realistic lighting and materials using OpenGL. Lumi provides a modular architecture for scene setup, camera control, and rendering. It leverages modern C++ capabilities and provides a simple GUI using ImGui for real-time interaction.
| Basic Diffuse Lighting | Cornell Box |
|---|---|
![]() |
![]() |
This guide will walk you through the setup process for the lumi OpenGL Path tracer using CMake and vcpkg for dependency management.
- CMake (version 3.15 or newer)
- A C++ compiler with C++20 support
- OpenGL drivers installed on your system
Start by cloning the main project repository to your local machine:
git clone https://github.com/silvanias/Lumi.git
cd lumiCreate a vcpkg directory inside the project and set up vcpkg, a C++ library manager:
mkdir vcpkg
cd vcpkg
git clone https://github.com/microsoft/vcpkg.git
./vcpkg/bootstrap-vcpkg.sh # On Windows use .\vcpkg\bootstrap-vcpkg.batInstall the required libraries:
./vcpkg/vcpkg install glm
./vcpkg/vcpkg install glfw3
./vcpkg/vcpkg install gladAgain, on Windows, you would use .\vcpkg\vcpkg instead of ./vcpkg/vcpkg.
Clone the Dear ImGui library inside the lib directory of your project:
mkdir lib
git clone https://github.com/ocornut/imgui.git lib/imguiCreate a build directory and navigate into it:
mkdir build
cd buildRun CMake to generate the build files:
cmake .. -DCMAKE_TOOLCHAIN_FILE=../vcpkg/scripts/buildsystems/vcpkg.cmakeWithin the build directory, compile the application:
cmake --build .After successfully building the application, execute it with the following command:
./venderOn Windows, you might need to navigate to the directory containing the generated executable and run vender.exe.
If you encounter any issues during setup or compilation, ensure that:
- Your CMake and Git versions meet the minimum requirements.
- All the prerequisites are properly installed.
- The vcpkg toolchain file path in the CMake command is correct.
For additional help, refer to the documentation of the respective tools or libraries, or consider reaching out to their communities.
Modify main.cpp or any other source files to customize the rendering logic and scene setup. The project is structured to allow easy extension of geometry, materials, and shaders.

