Software Rasterizer

TinyRenderer · CPU 软件光栅器

一个用 C++20 实现的学习型 CPU 软件渲染器,从 OBJ 模型解析开始,完成 MVP 变换、近裁剪、三角形光栅化、Z-buffer、1/w 透视正确插值、纹理采样和 Blinn–Phong 光照。

  • C++20
  • CPU Rendering
  • Rasterization
  • Z-buffer
语言
C++20
渲染方式
CPU 离线光栅化
输出
BMP 图像
TinyRenderer 离线渲染的 Dragon 模型

Overview

项目简介

这个项目沿着 TinyRenderer 的教学路线,从读取 OBJ 顶点、纹理坐标和面片开始,逐步把模型变换、裁剪、光栅化、深度测试与着色串成一条可运行的 CPU 渲染管线。

页面中的 Dragon 转台和阶段图均来自项目的真实离线输出。它是一项以理解渲染流程为目标的练习,不把教程中的方法包装成原创算法,也不以实时性或性能数据作为成果。

Results

真实结果展示

Dragon 0° 的离线渲染结果

Dragon 角度转台

拖动滑杆查看每隔 30° 输出的一帧;也可以聚焦滑杆后使用方向键逐帧切换。

Implementation

实现亮点

从模型到屏幕

解析 OBJ 数据,依次应用 Model、View、Projection 与 viewport 变换,并在齐次空间执行近裁剪。

光栅化与可见性

用重心坐标遍历三角形覆盖像素,通过 Z-buffer 保留离相机更近的片元。

插值与着色

使用 1/w 进行透视正确属性插值,完成纹理采样与 Blinn–Phong 光照计算。

Current Scope

当前范围

  • 当前使用固定视图矩阵(View 为单位矩阵),相机位置不提供交互式控制。
  • 目前只实现近裁剪,没有实现完整的六平面视锥裁剪。
  • 当前采用离线 BMP 输出,不提供实时窗口、自由相机或实时预览。
  • 项目没有记录统一硬件与参数下的 benchmark,因此页面不展示性能数据。

Sources & Notes