2.Transformation线性变换
WHY
- 我们通过摄像机对拍摄的画面进行缩放、旋转、偏移,来将三维模型映射到二维的屏幕画面上
二维线性变换
- 二维线性变换通用形式
1.缩放矩阵
- 对于矩阵上任意点
经过缩放矩阵后,结果为 ,比较好理解 - 当然,x轴和y轴方向的缩放不一定相同
2.反射矩阵
- 对于矩阵上任意点
经过反射后,结果为 ,相当于图像对于y轴进行了反转
3.切变矩阵
- 切变,具体表现为像拉着图像的一角向一个方向倾斜
- 观察可得当y=0时,图像在水平方向移动为0,当y=1时,图像在水平方向移动为a,且图像的y轴一直没有变化
- 得出结论,对于矩阵上任意点
经过切变后,结果为
4.旋转矩阵
- 前提:绕着原点(0,0)旋转,且默认逆时针旋转
推导流程
- 通过特殊点
经过旋转 角度,现在的坐标为 ,可得 ,得到两个式子 - 通过特殊点
经过旋转 角度,现在的坐标为 ,可得 ,得到两个式子 - 得出
齐次座标
WHY
为什么要学习齐次座标,因为平移变换不能直接写成矩阵形式

- 带入上面的通用式子后发现不能直接套用
- 为了统一标准表现矩阵的变换,大佬们引入了齐次座标
- 二维点=
- 二维向量=
- 二维点的平移矩阵如下
仿射变换
- 统一二维线性变换和平移变换,引入了仿射变换
- 仿射变换=线性变换+平移,类似结构如下
- 所有仿射变换可以写成齐次坐标形式
缩放矩阵(齐次坐标)
旋转矩阵(齐次坐标)
平移矩阵(齐次坐标)
多种变换组合
要点
- 组合变换的顺序不能调换
- 运算的顺序为从右往左
例子:
图像先旋转45,再x轴平移1。
例题:这个矩阵如何变化到最终结果
- 先平移到原点(0,0)
- 旋转到相应角度
- 平移相同距离返回到移动前的位置
三维线性变换
- 3D point=
- 3D vector=
三维空间仿射变换
缩放
平移
旋转
-绕x轴旋转
-绕y轴旋转
-绕z轴旋转
- 绕x轴旋转,绕z轴旋转和绕y轴旋转矩阵为什么不一致
- 因为y轴是由z轴叉乘x轴获得的(根据右手螺旋定则,手指由z轴绕向x轴,大拇指方向为y轴方向)
- x轴是由yXz得到,z轴是由xXy得到,y是相反的
罗德里格斯旋转公式:把任意旋转转化成矩阵形式
推导流程


观测变换(Viewing Transformation)
- 视图、摄像机变换
- 投影变换
- 正交变换
- 透视变换
1.视图变换(View/Camera Transformation)
问题:怎么拍一张照片
- 选一个好地方,人摆好位置(model transformation)
- 选一个好的角度放置摄像机,包括摄像机的位置高度,朝向等(view transformation)
- 拍照,把三维空间投影到二维空间(projection transformation)
简称MVP变换
- 通过三个变量来确定摄像机的唯一属性
- Position
,摄像机在三维空间里的位置座标 - Look-at/gaze direction
,表示摄像机的朝向 - up direction
,摄像机自身向上的方向
- 约定摄像机摆放在原点(0,0,0),自身朝向以y轴为向上,以-z轴方向为观测方向
问题:怎么让一个摄像机回到原点并恢复默认观察状态
- 移动摄像机回到原点(0,0,0)
- 旋转
,使其朝向-z轴 - 旋转
,使其朝向y轴
简单的描述为先平移后旋转
NEXT:怎么用矩阵来表示?
- 平移的矩阵好写的,但是旋转
和旋转 的矩阵比较复杂 - 但是从-Z、Y、X轴旋转到
向量的逆矩阵很好写
- 得到逆矩阵
- 由于旋转矩阵是正交矩阵,矩阵的转置=逆矩阵,转置后获得了旋转矩阵
总结
- 拍摄的物体要和摄像机一起运动到相对位置上
- 摄像机自身朝向为y轴,拍摄方向为-Z轴
2.投影变换(Projection transformation)
把三维空间投影到二维空间
a)正交投影(Orthographic projection)

- 不管摄像机距离远近,一样的大小
- 常用于UI界面
常规方式理解正交投影操作
- 正交投影的操作类似于把一个已知长宽高的立方体,不同比例缩放到
的标准1体积立方体中来 - 首先,把立方体放置到原点(0,0,0)
- 然后把长宽高缩放到(-1,1)
矩阵怎么表示?
b)透视投影(Perspective projection)
特点:
- 近大远小

- 齐次坐标中表示3维中的一个点(x,y,z,1),乘以k(k!=0),(kx,ky,kz,k),这个点还是原来的点(3维中)。
透视投影的转换关系表示
- 关键思想:找到初始点(x,y,z)与转化后的点(x',y',z')的关系
- 根据相似三角形
,同理 ,z轴方向未知 - 我们可以反推出变换矩阵的第一第二行和最后一行
接着来求第三行
- 根据近平面投影切面的点P’(x',y',z')的z'始终为z',z’对于投影后的P’已经没有意义了,这个信息点已经没用了
- 但对于3D图形管线来说,为了便于进行后面的片元操作,例如z缓冲消隐算法,有必要把投影之前的z保存下来,方便后面使用。
- 因此,我们利用这个没用的信息点存储为n,设第3个数为n
- x,y,1同乘以n,得到新的式子,已知矩阵的第三行与x,y无关,所以前两个位置为0,后两个位置设为A,B ,得到An+B1=n^2
矩阵表示:

- 再根据远平面切面的中心点经过变换仍是中心点,得到
- 联立后可得
- 最终推导出透视投影的变换矩阵
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署