<font style="line-height: 40px;"><strong>1)平移变换</strong></font>
从一个位置到另一个位置的变换可以用平移矩阵T表示,该矩阵通过向量 t = ( t<sub>x</sub> , t<sub>y</sub> , t<sub>z</sub> ) 对实体进行平移操作。
<center><img src="http://imgtec.eetrend.com/files/2019-04/%E5%8D%9A%E5%AE%A2/100042289-66…; alt=""></center><br>
其实还有另外一种形式(以左手坐标系为基准):
<center><img src="http://imgtec.eetrend.com/files/2019-04/%E5%8D%9A%E5%AE%A2/100042289-66…; alt=""></center><br>
第一种形式(以右手坐标系为基准的)进行变换时将T与需要变换的点或向量 A(列向量)相乘,即 TA 。第二种形式(以左手坐标系为基准)将需要变换的点或向量(行向量)与T相乘,即 AT 。
平移矩阵的逆矩阵为 T<sup>-1</sup>( t ) = T( -t ),也就是对向量t进行了置负操作。
<font style="line-height: 40px;"><strong>2)旋转变换</strong></font>
旋转矩阵 R<sub>x</sub>(Θ)、R<sub>y</sub>(Θ)、R<sub>z</sub>(Θ)分别表示将物体绕 x , y , z 轴进行旋转。
<center><img src="http://imgtec.eetrend.com/files/2019-04/%E5%8D%9A%E5%AE%A2/100042289-66…; alt=""></center><br>
<center><img src="http://imgtec.eetrend.com/files/2019-04/%E5%8D%9A%E5%AE%A2/100042289-66…; alt=""></center><br>
<center><img src="http://imgtec.eetrend.com/files/2019-04/%E5%8D%9A%E5%AE%A2/100042289-66…; alt=""></center><br>
注意,旋转矩阵表示物体是绕着指定轴(轴的指向朝外面)按顺时针方向旋转的,但这个形式的旋转矩阵是以右手坐标系为基准的。
左手坐标系的为:
<center><img src="http://imgtec.eetrend.com/files/2019-04/%E5%8D%9A%E5%AE%A2/100042289-66…; alt=""></center><br>
<center><img src="http://imgtec.eetrend.com/files/2019-04/%E5%8D%9A%E5%AE%A2/100042289-66…; alt=""></center><br>
<center><img src="http://imgtec.eetrend.com/files/2019-04/%E5%8D%9A%E5%AE%A2/100042289-66…; alt=""></center><br>
旋转矩阵的推导可以看这里:http://blog.csdn.net/zsq306650083/article/details/8773996
任意轴旋转任意角度矩阵:
<img src="http://imgtec.eetrend.com/files/2019-04/%E5%8D%9A%E5%AE%A2/100042289-66…; alt="">
对于这个3x3矩阵来说,其对角元素之和是一个与坐标轴无关的常数,称其为迹(Trace):tr( R ) = 1+2cosΘ
矩阵R的逆矩阵就是其转置矩阵,还有其他获取其逆矩阵的方法,即将 Θ 取负(绕着同一 坐标轴朝相反方向旋转)。旋转矩阵的行列式总是等于1.
<font style="line-height: 40px;"><strong>3)缩放矩阵</strong></font>
<center><img src="http://imgtec.eetrend.com/files/2019-04/%E5%8D%9A%E5%AE%A2/100042289-66…; alt=""></center><br>
s<sub>x</sub> , s<sub>y</sub> , s<sub>z</sub> 分别表示沿着 X Y Z 轴进行缩放的缩放比例。S矩阵的逆矩阵为 S<sup>-1</sup>( s ) = S ( 1/s<sub>x</sub> , 1/s<sub>y</sub> , 1/s<sub>z</sub> ) 。
如果对缩放矩阵 s 的一个或者三个分量置负,就会产生一个反射矩阵(镜像矩阵),如果其中两个缩放因子为 -1,那么将旋转180度,当发现变换矩阵是反射矩阵时,需要进行特殊处理,例如,一个三角形的顶点序列以逆时针方向排列时,在经过反射矩阵变换后,对得到一个顺时针方向排列的三角形顶点序列,这将导致不正确的光照效果和背面裁减。判断给点矩阵是否为反射形式,需要计算该矩阵左上部 3 x 3 矩阵行列式的值,如果为负,那么该矩阵就为反射矩阵。
<font style="line-height: 40px;"><strong>4)错切变换</strong></font>
错切矩阵有6种基本形式,分别表示为H<sub>xy</sub>(s)、H<sub>xz</sub>(s)、H<sub>yx</sub>(s)、H<sub>yz</sub>(s)、H<sub>zx</sub>(s)、H<sub>zy</sub>(s). 第一个下标表示由错切矩阵改变的坐标,第二个下标表示进行错切操作的坐标。
<center><img src="http://imgtec.eetrend.com/files/2019-04/%E5%8D%9A%E5%AE%A2/100042289-66…; alt=""></center><br>
通过下标可以找到参数s所在的位置。如本例中 x = 0 , z = 2 。
<center><img src="http://imgtec.eetrend.com/files/2019-04/%E5%8D%9A%E5%AE%A2/100042289-66…; alt=""></center><br>
错切矩阵的逆矩阵可以通过取负来取得 ( H<sub>ij</sub> )<sup>-1</sup>( s ) = H<sub>ij</sub>( -s )
<font style="line-height: 40px;"><strong>5) 刚体变换</strong></font>
刚体变换用于刚性物体的变换,只改变物体的方向和位置,不改变形状。可以将刚体矩阵 X 写成一个平移矩阵和一个旋转矩阵的级联:
<center><img src="http://imgtec.eetrend.com/files/2019-04/%E5%8D%9A%E5%AE%A2/100042289-66…; alt=""></center><br>
X的逆矩阵可以这样求得:X<sup>-1</sup> = ( T ( t ) R )<sup>-1</sup> = R<sup>-1</sup>T( t )-1 = R<sup>T</sup>T( -t ).
<font style="line-height: 40px;"><strong>6) 法线变换</strong></font>
注意,法线必须通过用变换几何图形的矩阵的逆矩阵的转置矩阵进行变换 N = ( M<sup>-1</sup> )<sup>T</sup>
<center><img src="http://imgtec.eetrend.com/files/2019-04/%E5%8D%9A%E5%AE%A2/100042289-66…; alt=""></center><br>
实际应用中,如果变换矩阵是正交的(如旋转矩阵),就没必要计算它的逆矩阵,因为正交矩阵的逆矩阵就是转置矩阵,两个转置矩阵相互抵消,相乘的结果还是原来的旋转矩阵。此外,还有平移矩阵,由于平移不改变向量的方向,所以可以进行任意次数的平移而不对法线产生任何影响。另外,如果使用一个或多个一致性缩放矩阵进行变换,也不需要计算相应的逆矩阵,因为这种缩放只改变法线长度,不影响其方向。这种矩阵进行变换之后需要对法线进行归一化(规范化)。
本文转自:博客园 - (廉江宏)<a href="http://www.cnblogs.com/ll-10/p/5470637.html">朴者</a>,转载此文目的在于传递更多信息,版权归原作者所有。