- Build it by MSVC with C++20.
- Refer to LearOpenGL, Godot, Unity and So on.
- file name(xxXxx)
- class name(XxXxx)
- class member var name(mXxx)
- struct name(XxXxx)
- struct member var name(--xxXxx--)
- all funcs name(XxXxx)
- temporary var or func var(xxXxx)
- cpu to gpu data var name keep same
Disclaimer: 👶小孩子不懂事做着玩的😋.
- ✅
Window- GLFW window wrapper
- Input event handling
- ✅
Camera- Roaming camera with mouse/keyboard
- Perspective projection & orthographic projection
- ✅
Mesh- Holds geometry data and GPU resources (VAO/VBO/EBO)
- Primitive factory functions can generate cube/sphere/plane for testing
- ✅
Transform- Holds position, rotation, scale(only for itself)
- ✅
Material- Manages shader/texture/uniform concepts
- ✅
Light- Directional Light
- Point Light
- Spot Light
- ✅
Entity- A renderable unit: binds
Mesh + Material + Transform - one parent(index), multiple children
- A renderable unit: binds
- ✅
Model- Holds a container of
Entity
- Holds a container of
- ✅
Scene- Holds
Entitylist,Modellist,Lightlist - Maintain parent-child relationship and logic
- Holds
- ✅
Renderer- Stateless service entry
- Renderer Pass & Renderer Graph Architecture
- Interface:
Render(const Scene&, const Camera&)
- ✅
Assimp Model Loader - ✅
Shadow Mapping - ✅
PBR + IBL - ✅
Post Process
graph TD
Mesh["Mesh"]
Transform["Transform"]
Material["Material"]
Entity["Entity<br/>mesh + material + transform"]
Model["Model<br/>vector<Entity>"]
Light["Light"]
Scene["Scene<br/>entities + models + lights"]
Camera["Camera"]
Renderer["Renderer"]
Mesh --> Entity
Material --> Entity
Transform --> Entity
Entity --> Model
Entity --> Scene
Model --> Scene
Light --> Scene
Scene --> Renderer
Camera --> Renderer
flowchart LR
A["App Loop"] --> B["Build Frame Context"]
B --> C["Collect from Scene<br/>Entities + Models + Lights"]
C --> D["Render State"]
D --> E["Submit Draw Calls"]
E --> F["Present"]


