CPU-Software-Renderer/README.md

162 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CPU Software Renderer
一个基于 C++20 和 SDL2 的 CPU 软光栅化练习项目。
这个仓库当前还处在早期阶段,重点不是调用现成图形 API 画三角形,而是自己维护帧缓冲、自己做基础光栅化,并逐步搭起一个小型 software renderer 的骨架。
## 当前状态
目前已经完成或具备雏形的部分:
- 使用 SDL2 创建窗口、纹理和显示循环
- 在 CPU 侧维护 `FrameBuffer`
- 像素写入接口 `set_pixel`
- 基础直线光栅化模块 `Rasterizer`
- 2D 三角形、包围盒、颜色等基础数据结构
- 独立的 `TriangleRasterizer` 模块,用于后续填充三角形
当前 `main.cpp` 主要用于验证基础链路,程序启动后会在窗口中绘制三条彩色线段组成的三角形轮廓。
还没有完成的核心能力:
- 完整接入实心三角形渲染流程
- MVP 变换
- 深度测试
- 重心坐标插值
- 光照
- OBJ 加载
- 可交互相机
## 当前结构
```text
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`
## 构建与运行
1. 用 Visual Studio 打开 `CPU-Software-Renderer/CPU-Software-Renderer.vcxproj`
2. 选择 `Debug``Release`
3. 选择 `Win32``x64`
4. 构建并运行
说明:
- 工程里已经分别配置了 Win32 和 x64 的 SDL2 include/lib 路径
- 运行时需要让程序找到与平台匹配的 `SDL2.dll`
- 如果你移动了仓库位置,可能需要同步检查 `.vcxproj` 里的绝对路径
## 设计取向
当前代码结构遵循一个比较简单的原则:
- 纯数据类型放在 `Math``RenderData`
- 做事的模块放在 `Core`、`Rasterizer`、`Asset`、`Shading`
- 先把 2D 基础链路理顺,再逐步加 3D pipeline
这意味着现阶段更强调“结构和边界先理清”,而不是一次性把所有功能堆进去。
## 后续计划
`TODO.md` 的路线,后续会逐步补齐:
1. 稳定的三角形填充
2. MVP 变换
3. Z-buffer
4. 属性插值
5. Blinn-Phong 光照
6. OBJ 模型加载
7. 相机控制
如果后续继续扩展,还可以考虑:
- Texture Mapping
- MSAA
- 更完整的数学库
- 更清晰的 shader 输入输出结构
## 说明
这个项目现在更接近“正在搭骨架的 renderer”不是一个已经完成的 3D 渲染器。
README 中提到的很多模块和目录,目的是反映当前的架构方向;其中一部分已经有初步实现,另一部分还只是为后续阶段预留。