- KNOWLEDGE.md:补全 Step 2:MVP 与视口变换,补全 Step 4:深度测试 - CONVERTIONS.md:规定三角形排列顺序为顺时针,即向量 AB.cross(AC) 为法线方向 |
||
|---|---|---|
| CPU-Software-Renderer | ||
| .gitattributes | ||
| .gitignore | ||
| AGENTS.md | ||
| CPU-Software-Renderer.slnx | ||
| Knowledge.md | ||
| README.md | ||
| TODO.md | ||
README.md
CPU Software Renderer
一个基于 C++20 和 SDL2 的 CPU 软光栅化练习项目。
这个仓库当前还处在早期阶段,重点不是调用现成图形 API 画三角形,而是自己维护帧缓冲、自己做基础光栅化,并逐步搭起一个小型 software renderer 的骨架。
当前状态
目前已经完成或具备雏形的部分:
- 使用 SDL2 创建窗口、纹理和显示循环
- 在 CPU 侧维护
FrameBuffer - 像素写入接口
set_pixel - 基础直线光栅化模块
Rasterizer - 2D 三角形、包围盒、颜色等基础数据结构
- 独立的
TriangleRasterizer模块,用于后续填充三角形
当前 main.cpp 主要用于验证基础链路,程序启动后会在窗口中绘制三条彩色线段组成的三角形轮廓。
还没有完成的核心能力:
- 完整接入实心三角形渲染流程
- MVP 变换
- 深度测试
- 重心坐标插值
- 光照
- OBJ 加载
- 可交互相机
当前结构
CPU-Software-Renderer/
├─ CPU-Software-Renderer/
│ ├─ main.cpp
│ ├─ Core/
│ │ ├─ FrameBuffer.h/.cpp
│ │ ├─ DepthBuffer.h/.cpp
│ │ └─ Renderer.h/.cpp
│ ├─ Math/
│ │ ├─ Vector2.h
│ │ ├─ Vector3.h
│ │ ├─ Vector4.h
│ │ ├─ Matrix4x4.h
│ │ └─ MathUtil.h
│ ├─ RenderData/
│ │ ├─ Color.h
│ │ ├─ BoundingBox.h
│ │ └─ Triangle.h
│ ├─ Rasterizer/
│ │ ├─ Rasterizer.h/.cpp
│ │ └─ TriangleRasterizer.h/.cpp
│ ├─ Scene/
│ │ ├─ Vertex.h
│ │ ├─ Mesh.h
│ │ ├─ Transform.h
│ │ ├─ Model.h
│ │ └─ Camera.h
│ ├─ Asset/
│ │ └─ ObjLoader.h/.cpp
│ ├─ Shading/
│ │ ├─ ShaderTypes.h
│ │ └─ BlinnPhongShader.h/.cpp
│ ├─ libs/SDL2/
│ └─ TODO.md
└─ README.md
模块说明
Core
FrameBuffer:管理 CPU 侧颜色缓冲DepthBuffer:为后续深度测试预留Renderer:为后续统一调度渲染流程预留
Math
- 放通用数学类型
- 当前以
Vector2、Vector2Int、Vector3为主 Vector4和Matrix4x4目前还是占位
RenderData
- 放渲染领域数据,而不是底层数学类型
- 当前包含
Color、BoundingBox2D、Triangle2D
Rasterizer
Rasterizer:负责基础线段光栅化TriangleRasterizer:负责三角形填充相关逻辑
Scene / Asset / Shading
这些目录已经预留出来了,方便后面扩展到 3D 渲染流程,但当前多数还是占位类。
构建环境
- Windows
- Visual Studio 2022
- MSVC
- C++20
- SDL2
工程文件是 Visual Studio 的 .vcxproj。
依赖
仓库内已经包含 SDL2:
- 头文件:
CPU-Software-Renderer/libs/SDL2/include - Win32 库:
CPU-Software-Renderer/libs/SDL2/lib/x86 - x64 库:
CPU-Software-Renderer/libs/SDL2/lib/x64
构建与运行
- 用 Visual Studio 打开
CPU-Software-Renderer/CPU-Software-Renderer.vcxproj - 选择
Debug或Release - 选择
Win32或x64 - 构建并运行
说明:
- 工程里已经分别配置了 Win32 和 x64 的 SDL2 include/lib 路径
- 运行时需要让程序找到与平台匹配的
SDL2.dll - 如果你移动了仓库位置,可能需要同步检查
.vcxproj里的绝对路径
设计取向
当前代码结构遵循一个比较简单的原则:
- 纯数据类型放在
Math和RenderData - 做事的模块放在
Core、Rasterizer、Asset、Shading - 先把 2D 基础链路理顺,再逐步加 3D pipeline
这意味着现阶段更强调“结构和边界先理清”,而不是一次性把所有功能堆进去。
后续计划
按 TODO.md 的路线,后续会逐步补齐:
- 稳定的三角形填充
- MVP 变换
- Z-buffer
- 属性插值
- Blinn-Phong 光照
- OBJ 模型加载
- 相机控制
如果后续继续扩展,还可以考虑:
- Texture Mapping
- MSAA
- 更完整的数学库
- 更清晰的 shader 输入输出结构
说明
这个项目现在更接近“正在搭骨架的 renderer”,不是一个已经完成的 3D 渲染器。
README 中提到的很多模块和目录,目的是反映当前的架构方向;其中一部分已经有初步实现,另一部分还只是为后续阶段预留。