GAMES101-04- Transformation Cont
Transformation Cont
上节课补充
对于旋转操作,旋转角度为\(\theta\),则矩阵可以写为:

那么旋转角度为-\(\theta\)时,矩阵怎么表示呢?
答:由于\(cos-\theta=cos \theta\) \(sin-\theta=-sin \theta\),所以从式子变换可看出\(R_{-\theta}=R^T_{\theta}\)

而从定义的角度可看出,\(R_{-\theta}=R_{\theta}^{-1}\)。
那么就可以得到一个有趣的关系,\(R^T_{\theta}=R_{\theta}^{-1}\),满足这样式子的矩阵也叫正交矩阵。
3D transformation
3D变换的基本概况
三维的变换都可以用二维的变换来类比,那么三维也引入齐次坐标,那么其表示形式可以写为:

同理,对点的定义操作如下:

当然,写\((x/w,y/w,z/w,1)\)也是对的,这样就是用四个数来表示三维空间的点。
那么三维空间也可以用4x4的矩阵来表示(仿射变换的情况下,矩阵的最后一行就是0,0,0,1):

思考,在上式写成4x4矩阵形式的时候,是先考虑线性变换呢,还是先考虑平移呢?
答:同二维空间一样,是先线性变换再平移。
3D变换的旋转表示
考虑三维空间下的旋转,分别是按x轴,y轴和z轴旋转α度,则对应的旋转矩阵如下:

为什么\(R_y(α)\)的矩阵表示形式跟\(R_x(α)\)和\(R_z(α)\)不一样呢?
答:观察可以看出,绕y轴的结果刚好跟绕x和z轴的方向是反的。因为绕y轴旋转的理解跟绕x和z轴旋转的理解不太一样。因为矩阵有旋转对称性,所以对于xyz坐标系来说,利用右手螺旋定理,x叉乘y得到z,y叉乘z得到x,而z叉乘x得到-y,这是跟y是反的,所以旋转矩阵的表示形式会跟绕x轴和绕z轴不太一样。
那么任意的复杂旋转都可以用简单的绕轴旋转来实现吗?
答:是的。式子\(R_{xyz}(α,β,γ)=R_x(α)R_y(β)R_z(γ)\)表示的意思就是任意的旋转都写成绕x,y,z轴的旋转的组合。(α,β,γ在数学上被称为欧拉角)
而旋转转换为绕轴旋转的方程式(罗德古斯旋转方程式)表示如下:

这个公式在干什么呢?
答:它给了我们一个定义旋转轴为向量n的旋转矩阵,但直接这样定义并不严谨,毕竟向量要确定起点和方向才对,实际上这是默认了这个向量是过原点的,这样的话这个向量就是起点在原点,方向为n这个方向,旋转角度为α,
Viewing观测 transformation
在介绍之前,先用拍照类比一下变换的过程:
- 找到一个好地方,安排好拍照的人员和动作=model transformation
- 找到一个好角度进行拍摄=view transformation
- 按下快门=projection transformation
view视图 transformation
像前面说的,视图变换等同于在摆相机,那么相关重点就有position位置\(\overrightarrow{e}\)、gaze direction看的角度\(\overrightarrow{g}\)、up direction向上方向\(\overrightarrow{t}\)。
向上方向是什么呢?怎么理解呢?
答:假设在相机上插根竖直的草,不改变相机看的角度,左右扭转相机,那么此时相机上插着的草所指向的方向就是向上方向。

Key observation
当用同样的方式移动相机和物体的时候(也就是,保证两者的相对位置时),得到的结果会是一样的。

既然这样的话,我们就可以定义相机的位置永远不变,就定相机的标准位置就在原点,相机永远往-z的方向看,相机永远以y轴为向上方向。

也可以用向量表示如下:

为什么要这样定义呢?
答:这样做可以让操作简化。
数学表示
视图变换记作\(M_{view}\),这个变换可以由先平移变换再旋转变换的操作表示为\(M_{view}=R_{view}T_{view}\)。
- \(T_{view}\)表示平移变换,对上原点

-
\(R_{view}\)表示做旋转变换
我们希望\(\overrightarrow{g}\)对应-z轴方向,\(\overrightarrow{t}\)对应y轴方向,\(\overrightarrow{g}\times \overrightarrow{t}\)对应x轴方向这样来调整,但是这样难以表示,所以反向思考,我们可以让x轴对应\(\overrightarrow{g}\times \overrightarrow{t}\)方向,y轴对应\(\overrightarrow{t}\)方向,z轴对应\(\overrightarrow{-g}\)方向,这样对应的旋转矩阵\(R_{view}^{-1}\)可以表示如下:

这个时候用到笔记一开始的内容,旋转矩阵是正交矩阵,满足\(R^T_{\theta}=R_{\theta}^{-1}\),所以已知\(R_{view}^{-1}\),那么\(R_{view}\)就可以用\(R_{view}=(R^{T}_{view})^{T}=(R^{-1}_{view})^T\)得到。
projection投影 transformation
投影有几种方式,一是3D到2D的投影,二是正交投影,三是透视投影。这里主要讲后两种投影方式。
首先从下图区别后两种投影方式:

左边这图,怎么看线都是平行的。而右边这图,线延长后会发现线会相交于某点。
那么这两个投影有什么本质区别呢?
答:正交投影不会带来近大远小的现象,而透视投影会带来近大远小的现象。
再举个例子,下图种透视投影的相机看作是一个点,而正交投影假设的就是相机离得无限远。

orthographic正交projection
-
定义一个长方体,其实就是定义各边对应三个轴的数值

-
将长方体的中心对应原点

-
进行缩放,从而把长方体转变为标准立方体

怎么做——变换矩阵

\(-\frac{r+l}{2}\)、\(-\frac{t+b}{2}\)、\(-\frac{n+f}{2}\)是为了实现平移,对应原点。
\(\frac{2}{r-l}\)、\(\frac{2}{t-b}\)、\(\frac{2}{n-f}\)是为了实现缩放,使得各轴范围就是[-1,1]。
那么进行缩放处理后,物体会被拉伸吗?
答:会被拉伸,但是在所有变换结束后,还会进行视口变换,此时还会进行一次拉伸,所以此时缩放被拉伸不是什么问题。
perspective透视projection
透视投影带来的效果就是平行线不再平行。
review 齐次方程

怎么做
透视投影是一个点延伸出来四棱锥,定义一个近和远,服从近大远小的规则。

对透视投影的处理分为两步:
- 将frustum压缩为cuboid(\(M_{persp\rightarrow ortho}\))
也就是考虑把后面的投影面在平面内向里进行压缩,压缩成跟前一个面一样大小。(规定近平面不发生变化且远平面的中心点也不发生变化)
怎么压缩远平面呢?
答:
第一步——考虑学过的知识,找到下图中点\((x,y,z)\)与点\((x',y',z')\)的关系,即对y挤压有\(y'=\frac {n}{z}y\)的关系,同理,对x挤压有\(x'=\frac {n}{z}x\)的关系。

也就是说,对于变换过程的齐次方程来说,肯定存在一个矩阵\(M_{persp\rightarrow ortho}\),使得该矩阵左乘以下图左侧的\((x,y,z,1)^T\)必然得到\((nx/z,ny/z,unknown,1)^T\),再对该矩阵处理得到\((nx,ny,still\ unknown,z)^T\)。
即,\((x,y,z,1)^T\)必然可以映射到右边这个向量\((nx,ny,still\ unknown,z)^T\)。

故\(M_{persp\rightarrow ortho}\)左乘\((x,y,z,1)^T\)的式子可写为:

因此,我们可以写出部分的\(M_{persp\rightarrow ortho}\)如下满足上面映射关系:

第二步——结合条件1(近平面点不变),假设z为n,那么得到下图式子:

此时就可以考虑特殊情况,\(M_{persp\rightarrow ortho}\)的第三行设为\((0\ 0\ A \ B)\)左乘\((x,y,z,1)^T\)会得到\(n^2\),即:
为什么第三行设为\((0\ 0\ A \ B)\)呢?
答:因为等号右侧的矩阵第三行为\(n^2\)不包含\(x\)和\(y\)(也就是跟\(x\)和\(y\)无关),所以第三行的前两列都要设为0,而后两列说不准,所以只能将第三行设为\((0\ 0\ A \ B)\)。

此时得到一个方程,\(An+B=n^2\)。
第三步——考虑条件2(远平面z不变),此处特别考虑远平面的中心点\((0,0,f,1)\),那么这个点的映射关系如下:

此时也得到一个方程,\(Af+B=f^2\)。
结合第二步和第三步的方程式,我们可以解得\(A=n+f,B=-nf\)。
最终得到完整的\(M_{persp\rightarrow ortho}\)。
在这节课的最后提出一个问题,Frustum中n和f处的z是不变的,那么考虑在n和f之间的某个z’的截面在远平面进行压缩时z‘是否会改变?(而这个n和f其实是往-z轴方向看的,所以要注意——n其实是大于f的)
- 做正交投影(\(M_{ortho}\))
由于正交投影,上方已经解出,所以这部分就不再记录了。

浙公网安备 33010602011771号