Soft Renderer
原创2026/5/27大约 2 分钟
实践:软渲染
早早就已经看完了Games101的课程,但是当时对于C++一直不太熟悉,所以对于其课后作业,也是完全没做的。
后来写了渲染器,开始上手了C++,且在写shader的时候发现,貌似我对于光栅化过程中的各种空间,其实并没有很清楚,想着若是现在的自己,应该能独立地实现软渲染了,遂有了这次实践。
本篇旨在厘清各种坐标系。
Math
实现了渲染流程中所需要的所有数学工具,完成后发现还挺简单的。
Vertex Stage
模型数据
模型中的顶点数据
M矩阵
M矩阵是模型矩阵,将模型坐标系转换到世界坐标系。
V矩阵
V矩阵是观察矩阵,将世界坐标系转换到观察坐标系
P矩阵
投影矩阵又分为:
- 透视矩阵
- 正交矩阵
将观察空间转换到裁剪空间
注意,此处的的裁剪空间,还不(一定)是NDC空间
Rasterization
NDC空间
经过MVP之后的裁剪空间。还需要经过透视除法。才能得到NDC空间
注意,对于正交投影而言,w = 1,所以除不除的其实无所谓
但是在渲染管线中,透视除法是默认的固定操作
视口变换
将NDC空间[-1,1]转换成屏幕空间[width, height];
剔除三角形
Fragment Stage
像素着色阶段拿到的Pos是屏幕像素空间的了
结尾
其实这个软渲染器早在3月份就写完了,一直都没补充这一篇解惑总结,事情太多了。
现在要着手学习Vulkan了,就先把欠的补上