图形学入门--系列开篇
挖个新坑
建了博客就想把所有学的东西记录下来。
这学期学了一些图形学基础知识,想整理下来,不知道能不能坚持下来。
这个人又开始画三角形了
学习路线
本系列主要参考 GAMES101(现代计算机图形学入门) 课程体系,同时补充学校课程中讲得不够深入的部分。整体分为五个阶段,从 2D 光栅化一路写到光线追踪。
一、光栅化基础(2D)
从”如何在屏幕上画一个像素”开始,建立连续数学到离散像素的思维转换。
- 直线光栅化:DDA、Bresenham 中点划线、八分象限推广
- 圆与椭圆的绘制:中点画圆法、八分对称、增量递推
- 多边形填充:x-扫描线算法、有效边表(AET)、边界填充与洪水填充、扫描线种子填充
- 二维几何变换:齐次坐标、平移/旋转/缩放/反射/错切矩阵、仿射变换的性质
- 线段裁剪:Cohen-Sutherland 编码裁剪、Liang-Barsky 参数化裁剪
- 多边形裁剪:Sutherland-Hodgman 逐边裁剪
二、三维管线
从 2D 进入 3D,掌握模型坐标系到屏幕坐标系的完整变换链。
- 三维几何变换:4×4 齐次矩阵、三维旋转(欧拉角/罗德里格斯旋转变换)
- 观察变换:摄像机坐标系(LookAt 矩阵)、Model → World → Camera 变换管线
- 投影变换:正交投影 vs 透视投影、视景体(frustum)、透视除法、NDC
- 三角形光栅化:屏幕空间映射、重心坐标插值、逐像素属性插值
- 可见面判断:Z-Buffer(深度缓冲)、画家算法
三、着色与纹理
让 3D 画面看起来接近真实。
- 光照模型:Phong 反射模型(环境光 + 漫反射 + 镜面高光)、Blinn-Phong 优化
- 着色方式:Flat Shading → Gouraud Shading → Phong Shading 的原理与对比
- 纹理映射:UV 坐标、重心坐标插值、双线性插值与最近邻采样、Mipmap、透视校正
四、几何处理
从离散的三角形网格延伸到光滑的参数曲面。
- 贝塞尔曲线:伯恩斯坦多项式、de Casteljau 递推、几何连续性
- B 样条与 NURBS:节点向量、基函数、B 样条曲面
- 网格处理:网格细分(Loop、Catmull-Clark)、网格简化(边坍缩)
五、光线追踪
从光栅化(速度换质量)转向光线追踪(质量换速度),理解物理上正确的渲染。
- Whitted 光线追踪:光线与几何体求交(球、三角面片)、递归反射与折射、阴影光线
- 加速结构:包围盒层次结构(BVH)、SAH 启发式构建、均匀空间划分
- 路径追踪:渲染方程、蒙特卡洛积分、重要性采样、全局光照
配套项目
系列文章会配套一个基于 SDL + 纯 CPU 的软渲染器,不依赖 OpenGL/DirectX。
- 从 2D 画线画圆开始,逐步加入 3D MVP 管线、光栅化、着色、纹理
- 所有渲染逻辑从零手写,保持代码短小、易于在博客中展示
路线只是方向,顺序和范围可能会在写作过程中调整。