Games101 图形学入门笔记

变换(Transformation)

2D

缩放 的矩阵形式

演示图片

** 翻转 的矩阵形式 相对于y翻转**​

演示图片

水平方向切变 相当于X轴偏移了 a*y ,y 不变

演示图片

** 旋转矩阵**​

演示图片

演示图片

线性变换 通过一个矩阵 * 一个坐标 可以得到一个目标坐标的形式

演示图片

齐次坐标 概念 为了解决平移无法用线性变换满足而提出的一种办法

演示图片

演示图片

** 仿射变换 + 平移变换 在其次坐标系下的表示 都是矩阵最下面一行是001,最后一列前两个数是平移的位移数,前面是a,b,c,d是线性变换需要的四个值**​

演示图片

演示图片

**变换组合 **例如对x这个点依次进行A1-An的一系列矩阵变换操作,可写成左边那个依次相乘的形式,又知矩阵是可以乘法结合律的规则,所以可把左边A1-An的一系列3x3的变换矩阵全部相乘然后再乘上x点,依然等价于右边

演示图片

**变换分解 **示例为将旋转原点从(0,0)原点变成沿任意一点旋转,此处就可以通过变换分解去做这个事,就是先将 点移动到原点 =》旋转 =》移动到初始点,即可完成绕任意点旋转

演示图片

3D

线性变换和平移变换依旧符合2维规则,不过是矩阵从2x2变成3x3,依然会有齐次坐标的表示

演示图片

缩放 和 平移的 齐次坐标下的矩阵表示:

演示图片

旋转:分别是绕x,y,z轴旋转的矩阵 因为 y 轴是 z 叉乘 x得到的,在矩阵中的顺序跟前面两个轴是反的,所以矩阵中写作y轴旋转矩阵时是逆矩阵的值

演示图片

欧拉角 (Roll, Yaw, Pitch 三种旋转方式) 四元数自己去学习

演示图片

演示图片

2D变换附加

旋转矩阵 的负角度的推导得到的矩阵正好是 原始矩阵的转置,由此得出 旋转的 逆矩阵等于它的转置

此矩阵形式在数学上 称为 正交矩阵

演示图片

观测变换

分别为 下图中两种 视图 和 投影 投影变换又包含 正交 和 透视

演示图片

MVP模式,对应的 从模型 到 视图 到 投影,类似于一个照相的过程

演示图片

观测视角需要定义的数据

演示图片

所以定义好了一种规则,把"相机固定到一个角度和位置”,然后其他物体做相对运动,位置是原点,朝向是-z

演示图片

然后去算视图变换矩阵,根据前面几个需要满足的条件分解得到,先平移位置到原点,就是上半部分图示,直接在最后一列前三个值取负就行,旋转要麻烦一些,不过也是运用前面提到的旋转的正交规则来推算即可,如果我们直接

演示图片

是不好得到矩阵的,我们可以把这些信息都反过来得到逆矩阵,代入X,Y,Z轴的向量相乘是可以得到对应我们上面条件的值的,已知正交矩阵规则,他的逆矩阵就等于他的转置,可得到最终的矩阵,然后拿我们得到的旋转矩阵加上前面的平移矩阵就得到了我们的视图变换 Mview

演示图片

模型视图变换(ModelView),指的就是把模型也通过视图矩阵变换到我们指定的地方去,因为前面说的视图矩阵就是对模型应用的,所以统称为ModelView,最开始有提到MVP,MV已经说完,下面就是Projection(投影)

投影

简单总结两种投影方式 正交投影面的对应边是平行的不会相交,透视投影则会,本质来说就是透视投影更接近于人眼的方式,会有近大远小的感觉,透视投影亦是为了表示这个

演示图片

演示图片

正交投影

简单说明正交投影的做法,就是把摄像机变换到我们之前说的位置后,然后把Z轴去掉,只有x,y的时候,物体就会从摄像机看过去就是都在一个x,y的平面上并且没有远近关系的存在,并且会把他们都移动到一个-1到1的一个矩形平面上

演示图片

图形学实现

** 1.先定义一个立方体,l,r-b,t-f,n 分别对应x,y,x轴的范围点,在实现上的细节就是先把立方体的中心点移动到原点,再把每个轴上的点范围缩放到-1,1之间**​

演示图片

** 2.右手坐标系和左手坐标系下的 z轴 由远到近的值大小是不一样的,因为是定了是面向-Z的方向看去,在右手下,越远的物体z值会越小,左手是不一样的,因为坐标系不同**​

演示图片

** 3.正交矩阵变换 根据平移 和 缩放的矩阵相加得到正交矩阵变换**​

演示图片

透视投影

基本概念 最常用于 计算机图形,艺术等,有近大远小,平行的线投影后不会平行

演示图片

透视矩阵的推导过程:首先先把Frustum 转换成 正交形式,也就是下图两个立方体,左边是透视,右边是正交,如果要把左边变成右边的话,就需要把Frustum的原平面上的点往中心挤压,挤压的过程变换后就变成正交投影了,然后加上之前说过的正交的矩阵变换,最后就是透视投影的效果,这就是整个透视投影的步骤,下面会推导挤压的过程矩阵变换,首先定义好一些不变的规则, 近平面在过程中n的值不会改变,远平面f的值也不会改变,远平面中心点的位置也不会发生改变,然后进行推导

演示图片

推导过程:最左边的黑色点是视角点,现在是在侧面的角度示意图,现在去算Y轴的变化公式,已知当前点x,y,z,要将y移动到y丿,根据相似三角形理论,知道n和z的比例一定等于y和y丿的比例,由此得出右边公式

演示图片

上面是Y轴的,X轴的点变化同理,已知我们要算出来的矩阵乘上我们的点一定

要得到 ==

演示图片

然后又根据齐次坐标规则一个点乘上固定的数得到的一定是同一个点,所以这里我们就可以乘上z,因为z未知,就得到 ==》

演示图片

下图是总的流程:

演示图片

根据我们已知一个矩阵乘上我们的点必须得到(nx,ny, *,z),就可以反推出已知的矩阵参数,就是下面这个矩阵,现在就是第三行未知,后面要去算未知的

演示图片

现在我们要推导Z值的矩阵表示,已经最开始说过一个点在n和f的平面上都不会发生变化,所以假设现在点在n的平面上,得到(x,y,n,1),然后把他乘以N,依然是他本来的点,得到 ==》

演示图片

然后不管x,y,只看z,如果要得到n的平方,只会有A和B的值会有变化,前面两个肯定都是0,我们只需要去看A和B分别是多少就行

演示图片

演示图片

再代入之前说的远处中心点(0,0,f,1)不会改变,那可按同样方式推导出下面公式

演示图片

最后就能通过这两个公式得到 A 和 B 分别是多少,到目前为止就能得到完整的挤压矩阵了

演示图片

变换 End\~