【读书笔记】计算机图形学基础(虎书)第6章 - 转换矩阵

2021/8/19 6:06:11

本文主要是介绍【读书笔记】计算机图形学基础(虎书)第6章 - 转换矩阵,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

计算机图形学里包含很多的旋转(Rotation)、位移(Translate)、切变(Shear)和拉伸(Scale)操作来达到形变的目的,这些操作都可以很简单的通过转换矩阵(Transfromation Matrix)来达到。基础见此链接。需要注意切边指一边变动,而其他边不改变的操作。所有转换需要注意的是基的改变是以原点为中心的,因此围绕某个点旋转需要先将原点放在旋转点上,旋转再还原,即类似\(T(c)RT(-c)\)的操作。另外要注意的是矩阵操作是从右往左的顺序。

矩阵分解

之前我们提到过对称矩阵的特征值分解可以表示为\(RSR^T\)的形式,其中R代表了一种旋转,S代表了一种拉伸操作。另外一种简单方法则是列向量的线性变换,以列向量的方向为新的底边/侧边方向,列向量的长度为拉伸长度倍率。对于非对称矩阵而言可以使用SVD分解的操作,即\(A=USV^T\),之前提到过两侧的正交奇异向量矩阵分别为旋转操作。需要注意的是如果要维持S为正值,则两侧的矩阵既可能是旋转也可能是反转(reflection)。我们可以简单的通过检查行列式来进行检测(+1是旋转,-1是反转),这部分也可以参考此链接

矩阵旋转

进行旋转操作时,有被称为Paeth Decomposition of Rotations的方法将旋转操作分为三次连续的切变操作,具体见链接。这么做的好处是不需要将图形的顶点进行变换然后重新做图,而是基于原图的基础上直接进行几何变换,将一行或一列像素同时变换再一一遍历即可。

三维旋转围绕轴\(a\)进行旋转的时候,可以取轴\(a\)的单位方向向量\(w\),构造与其垂直的平面\(uv\)并构成\(uvw\)的基,得到对应正交矩阵\(A\)。接下来进行矩阵变换\(ARA^{-1}\),先通过\(A^{-1}\)将\(xyz\)坐标系切换至\(uvw\)坐标系,接着在\(R\)内固定第三列\(w\)值,最后通过\(A\)还原到\(xyz\)坐标系。具体如下,并运用到了正交矩阵\(A^{-1}=A^T\)的特性。

法向量转换

在矩阵变换时,平面的切线\(t\)经过变换\(M\)后\(Mt\)依然是矩阵的切线,但平面的法向量经过变换后(Mn)则不一定,我们需要一个法向量转换矩阵\(N\),使得\(Nn\)依然为转换后平面的法向量。从数学上我们需要转换前\(n^Tt=0\)并且转换后\((Nn)^T(Mt)=0\),见下图。

因为\(n^Tt=n^TM^{-1}Mt=(n^TM^{-1})(Mt)=0\),我们可以知道一个解为\((Nn)^T=n^TN^T=(n^TM^{-1})\)即\(N=(M^{-1})^T\)。因为逆矩阵可以通过cofactor来进行计算,经过转换可以得到以下公式

齐次坐标

为了将平移操作利用矩阵乘法而不是加法进行运算,可以引入第四维度的齐次坐标,单独记录位移量,见下图。引入的原因可以参考此链接,另外在下一章的透视中会有第四维度值代表距离的额外效果。

另外我们规定额外维度值为\(1\)的时候为标准空间,可以参考齐次坐标的介绍,类似于隐式函数中取0,1是为了乘除的单位。在这里我们可以观察到在齐次坐标下任意转换矩阵\(A\)最后一行为\([0,0,0,1]\),根据矩阵行列点乘的乘法原则,因为\(A^{-1}A=I\)且\(I\)的最后一行也为\([0,0,0,1]\),我们知道\(A^{-1}\)的最后一行也必须为\([0,0,0,1]\),否则最后I的计算结果最后一行会错误。

坐标系变换

在进行矩阵转换的时候,我们可以按照点的转换或者坐标系的转换来进行不同的理解,见下图。注意这里可以参考3Blue1Brown中线性变换“基的变换”和“点的坐标”本身是一体的有着相同的思想。本质是全局空间只有一个,只是用不同的坐标系语言来形容同一个点。这个理解方法在游戏等地方经常用到,例如赛车游戏可以以赛车的位置为原点构成坐标系并移动坐标系,或者我们将赛车固定在原点变动整个场景在赛车坐标系的位置。这个思想在前文相似矩阵或矩阵分解时已经反复提及,具体也可以参考此链接。

我们这里以一个2D场景作为例子,见下图。

通常来讲,如果以基\(uvw\)构成一个转换矩阵,其代表将\((uvw)\)坐标系下的坐标转换至标准基坐标系,但原点不变。如下图所示,利用\(uv\)构成的转换矩阵转换了坐标系,再进行最后的\(e\)至\(o\)的位移。这里不先位移的原因是一开始的单位是以\(uv\)坐标系来的,位移的计算相对复杂,实际上也可以先位移。对于相反的方向来看(即标准坐标系转换至\(uv\)坐标系),我们先位移再变基,因为位移时还在标准坐标系内。


对于以上这样的坐标系转换可以有如下的标准公式,二维去掉w列即可。



这篇关于【读书笔记】计算机图形学基础(虎书)第6章 - 转换矩阵的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程