ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-08-19 04:00:28  阅读:404  来源: 互联网

标签:转换 读书笔记 矩阵 图形学 虎书 旋转 位移 坐标系 向量


计算机图形学里包含很多的旋转(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列即可。

标签:转换,读书笔记,矩阵,图形学,虎书,旋转,位移,坐标系,向量
来源: https://www.cnblogs.com/haosongGame/p/bookFundementalCG-06.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有