GAMES101 课程笔记
发布于:2026/02/16
数学表示
为了让平移操作能够使用线性变换来表示,点、向量的实际维数在原先的维数上扩展一维,这即为齐次坐标(Homogeneous coordinates)。
以二维举例:
- 一个二维点
- 一个二维向量
假设二维点为 ,则其实际的坐标为 。
在这个定义上,可以方便地定义三种基本操作,它们被称作仿射变换(Affine transformation):
- 缩放
- 旋转
- 平移
三维坐标中,关于 轴旋转还有特别的名词:Roll, Pitch, Yaw。在 Reddit 上一个比较好的助记:
Roll: Put your ear to your shoulder.
Yaw: Shake your head no.
Pitch: Shake your head yes.
变换
Model, View, Projection
- 模型变换(Model Transformation)
- 将要显示的模型放置好位置
- 视角变换(View/Camera Transformation)
- 对整个坐标系进行仿射变换,使得摄像机位置处于变换后的原点
- 从摄像机视角来看,位置没有发生任何变化
- 一般是摄像机上方对齐 轴,前方对齐 轴
- 先将摄像机放置于原点,再进行旋转。即对于视角变换 ,给定平移操作 和旋转操作 ,有
- 投影变换(Projection Transformation)
- 将一定视角内三维坐标投影到有限的规范化区域中
- 正交投影(Orthographic Projection)
- 没有远近变化,两条平等的线在投影后仍为平行
- 将一个 大小的长方体规范化到 上
- 透视投影(Perspective Projection)
- 近大远小
- 可以先将梯形体压成长方体,再做正交投影
- 给定纵深起点、目标宽高 ,对于任何要投影的一点 ,可以用相似三角形、矩阵求解、特值代入的方法求出到长方体的变换矩阵 。
光栅化
- 对原先处于三维空间中的物体进行每个像素的采样
- 用三个叉积的结果,判定像素是否在三角形内部
- 抗锯齿
- 产生锯齿的根本原因,是采样的频率低于图像本身频率。采样本质是对图像的频率域内容进行复制粘贴,在低频采样后,图像会在频率域上产生混叠,也即发生了锯齿。
- MSAA(Multisample anti-aliasing)
- 本质是在一个像素内做取平均卷积操作,即在采样前先去除高频
- 对一个像素内采样 个点,取所有点的平均值作为实际采样值
- 采用 z-buffer 渲染最靠近摄像机的物体
着色
- Bling-Phong 反射模型
- 镜面反射光(Specular highlights):给定光源能量 、表面离光源距离 、入射角度 、表面法线 、表面反射系数 、给定观察方向 、衰减因子 ,首先得半程向量 为
可得镜面反射光 为
- 漫反射光(Diffuse reflection):给定光源能量 、表面离光源距离 、入射角度 、表面法线 、表面反射系数 ,可得漫反射光 为
- 环境光(Ambient lighting):给定环境光系数 与环境光强度 ,可得环境光 为
- 最终光照
- 镜面反射光(Specular highlights):给定光源能量 、表面离光源距离 、入射角度 、表面法线 、表面反射系数 、给定观察方向 、衰减因子 ,首先得半程向量 为
- 着色频率
- 平直着色(Flat shading):每个三角形上所有点共享一个颜色
- Gouraud 着色:算出三角形三个顶点的颜色,内部点颜色通过插值得到
- Phong 着色:算出三角形三个顶点的法线,内部点法线通过插值得到,每个采样点的颜色单独计算
- 材质
- 将一个二维图像贴到三维物体上
- 每个三角形的顶点映射到二维图像上的一个坐标
本文内容采用协议:CC BY-SA 4.0