This Real Time 3D Reconstruction Software (RT3DRS), is a C++/CUDA research project for interacting with 3D scenes, handling dataset loading, volumetric rendering, and related 3D (maybe 4D one day)reconstruction experiments. The repository combines an OpenGL viewer, Dear ImGui tools, CUDA kernels, NeRF-style dataset loading, and a collection of Python utilities used for preprocessing and experimentation.
This repository is being brought back into active maintenance from this early 2026 in order to improve code quality, add modularity to extract core features into easy-to-share piece of software and much more.
The checked-in code already contains useful subsystems, but it still reflects an older research-project layout done a little more than 2 years ago.
- A desktop application built with GLFW, GLEW, OpenGL, Dear ImGui, and ImPlot
- A scene graph centered on
SceneandSceneObject - CUDA-backed dense and sparse volume experiments, ray casting, plane cutting, and optimization
- A NeRF dataset loader that creates
ImageSetandCameraSetchildren - Small GoogleTest coverage for Morton / sparse octree helpers
- A separate
python/area with preprocessing, calibration, dataset, and experiment scripts, treated as ancillary tooling rather than the main implementation path
src/main.cppinitializes GLFW, GLEW, ImGui, OpenGL state, CUDA device selection, and the main render loop.AppControlleracts as the current composition root and builds the default scene content plus UI interactors.Scenestores root scene objects, tracks the active camera, and renders active objects.SceneObjectgives renderable objects an id, activation state, optional child objects, and an editor-facing type.ObjectListInteractorandObjectListViewexpose the scene graph in the "Objects" ImGui window.SceneObjectInteractorroutes the current selection to type-specific interactors and inspectors.- The main implementation work lives in
src/model/,src/view/,src/cuda/, andsrc/utils/.
| Path | Purpose |
|---|---|
src/ |
First-party C++, CUDA, shaders, and UI code |
src/controllers/ |
Scene ownership and top-level app composition |
src/interactors/ |
UI-to-scene coordination layer |
src/model/ |
Datasets, cameras, volumes, optimization, and rendering-adjacent domain code |
src/view/ |
Renderables, helpers, and ImGui editors |
src/cuda/ |
CUDA kernels, descriptors, and GPU helpers |
src/shaders/ |
GLSL shader programs loaded at runtime |
tests/ |
GoogleTest-based C++ tests |
python/ |
Supporting scripts and experiments not integrated into the CMake app |
include/ |
Vendored or embedded third-party dependencies and headers |
external/ |
Additional vendored dependencies such as GoogleTest and libmorton |
docs/ |
Hand-written project documentation |
More detail is documented in docs/project-structure.md.
The current checked-in build system is still the legacy one and has not yet been modernized:
cmake_minimum_required(VERSION 3.10)- C++ standard currently set to
17 - CUDA language enabled directly in the root target
- hard-coded CUDA architecture currently set to
89 - broad use of global include directories and manually maintained source lists
Typical historical build flow:
mkdir -p build
cd build
cmake ..
cmake --build . -j- CUDA
- OpenGL
- GLEW
- GLFW
- OpenCV
- Assimp
- zlib and window-system libraries required by GLFW / OpenGL on Linux
Several dependencies are vendored under include/ and external/, but not all system libraries are. The old README also pinned the host compiler to GCC 8; that should be treated as historical context, not the long-term target.
The current executable expects some resources at runtime via relative paths:
- shaders under
../src/shaders/ - icon font under
../include/icons/fa-solid-900.ttf - datasets and HDRI assets under
../data/...
Important: there is currently no tracked data/ directory in the repository. That means datasets, HDRIs, and other runtime assets must be provided separately before the viewer can exercise its full pipeline.
- A
Doxyfileexists, but the checked-indocs/index.htmlis currently only a placeholder. - When the codebase is reorganized, these docs should be updated in the same change.
This repository is distributed under the terms of the LICENSE file.
