最近为了求职重新开始把图形学相关的内容重新系统的学习,先把Games101的内容入门,然后把虎书相关的内容补充。
矩阵变换可以对不同坐标系之间进行转换,在这个过程中,主要有MVP三大变换,即模型变换、视口变换、投影变换。即从本地坐标系转换到世界坐标系、世界坐标系转换到观察坐标系、相机的不同投射方式。
矩阵变换-模型变换Modeling
模型变换是最简单基础的变化,把物体所在的本地坐标系转换到世界坐标系,主要包括对物体进行大小、旋转、平移变换。都以矩阵形式表示。
[x′y′]=[s00s][xy]
等比例缩放
[x′y′]=[sx00sy][xy]
不均匀缩放
[x′y′]=[−1001][xy]
反射/对称
[x′y′]=[1a01][xy]
切变
[x′y′]=[cosθ−sinθsinθcosθ][xy]
旋转矩阵 通过特殊点即可推导
旋转矩阵同时是正交矩阵,即RTθ=R−1θ.
R−θ=[cosθsinθ−sinθcosθ]=RTθ=R−1θ
上面两种变换在二维矩阵中即可完成,并且是线性变换。但平移变换不是线性变换,而是仿射变换(Affine Transform),仿射映射是线性映射和平移变换之和。
[x′y′]=[abcd][xy]+[txty]
平移
但我们希望在一个矩阵内同时表示线性几何变换和平移变换。于是引入一种统一表达方式——齐次坐标,增加一个维度,这样有利于表达仿射变换的表示。并且只有仿射变换的第三行为(0,0,1).
2D点的表达方式是(x,y,1)T,增加的维度不为0取常数时为点,通常为1或w。2D向量的表达方式(x,y,0)T,增加的维度为0时表示为向量。因为向量具有平移不变性,即(x,y,0)T=R(x,y,0)T.并且满足v+v=v,p-p=v,p+v=p,p+p=p(ps:两点的中点,(x,y,w)T=(x/w,y/w,1)T)。
⎡⎢⎣x′y′1⎤⎥⎦=⎡⎢⎣10tx01ty001⎤⎥⎦⎡⎢⎣xy1⎤⎥⎦=⎡⎢⎣x+txy+ty1⎤⎥⎦
平移
以此类推我们需要表示三维点和三维向量的时候,需要引入齐次坐标增加到四维。
矩阵变换-视口变换Viewing
定义一个相机由三大部分组成 1.相机位置pos e 2.相机朝向方向^g 3.相机上方向^t
当相机与目标之间的相对位置不变时,所投影得到的图像仍然一致。于是假设相机在原点、朝向-Z轴方向和相机上方向为Y轴。为了将相机移到原点对应的视口矩阵,需要对相机先平移后旋转Mview=RviewTview。其中相机的旋转矩阵需要从矩阵的逆进行推导,我们能从相机的定义得到相机初始朝向的三个轴((^g×^t),^t,−^g),我们需要把相机移动到原点,又因旋转矩阵为正交矩阵。则通过转置便可以得到旋转矩阵。
R−1view=⎡⎢
⎢
⎢⎣100xe010ye001ze0001⎤⎥
⎥
⎥⎦
R−1view=⎡⎢
⎢
⎢
⎢
⎢⎣x^g×^tx^tx−^g0y^g×^ty^ty−^g0z^g×^tz^tz−^g00001⎤⎥
⎥
⎥
⎥
⎥⎦
Rview=⎡⎢
⎢
⎢
⎢⎣x^g×^ty^g×^tz^g×^t0x^ty^tz^t0x−^gy−^gz−^g00001⎤⎥
⎥
⎥
⎥⎦
矩阵变换-投影变换Projection
投影变换将观察坐标系的点投影到图像上。
正交投影Orthographic Projection
正交投影就是将一个立方体[l,r]×[b,t]×[f,n]进行见平移后缩放映射到一个规范正方体Canonical[−1,1]3.
Mortho=⎡⎢
⎢
⎢
⎢
⎢
⎢⎣2r−l00002t−b00002n−f00001⎤⎥
⎥
⎥
⎥
⎥
⎥⎦⎡⎢
⎢
⎢
⎢
⎢
⎢⎣100−r+l2010−t+b2001−n+f20001⎤⎥
⎥
⎥
⎥
⎥
⎥⎦
透视投影Perspective Projection
透视投影与正交投影的不同之处在于原先平行的视线不再平行,符合近大远小的特征。透视矩阵一般分成两步1.将透视投影挤压到正交投影的形式MPerp−>Ortho,其中n,f不变 2.再进行正交投影的步骤MOrtho.则对应透视投影的矩阵为MPerp=MOrthoMPerp−>Ortho.

由上图可以推导除第三行对应的投影矩阵
MPerp−>Ortho=⎡⎢
⎢
⎢⎣n0000n00????0010⎤⎥
⎥
⎥⎦
对应剩下z轴的推导,我们可以通过透视投影的原理得到两个结论1.在近平面所有点的z值不变。2.远平面上的点z值也不变。又因z值与x、y值无关,我们假设矩阵第三行M_{第三行}=[0 & 0 & A & B].
MPerp−>Ortho⎡⎢
⎢
⎢⎣xyn1⎤⎥
⎥
⎥⎦=⎡⎢
⎢
⎢⎣xyn1⎤⎥
⎥
⎥⎦=⎡⎢
⎢
⎢
⎢⎣nxnyn2n⎤⎥
⎥
⎥
⎥⎦,[00AB]⎡⎢
⎢
⎢⎣xyn1⎤⎥
⎥
⎥⎦=n2
近平面推导
MPerp−>Ortho⎡⎢
⎢
⎢⎣00f1⎤⎥
⎥
⎥⎦=⎡⎢
⎢
⎢
⎢⎣00f2f⎤⎥
⎥
⎥
⎥⎦,[00AB]⎡⎢
⎢
⎢⎣00f1⎤⎥
⎥
⎥⎦=f2
远平面推导:取(0,0,f,1)
综上,透视投影转正交投影对应的矩阵MPerp−>Ortho如下.
MPerp−>Ortho=⎡⎢
⎢
⎢⎣n0000n0000n+f−nf0010⎤⎥
⎥
⎥⎦
最后对应的作业1可能涉及到罗德里格斯公式,就暂时不展开来分析,后续应该在虎书中会提到再补充。
第一节的内容就大致是这些,感谢看到这里,Cheers!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!