Shader|矩阵:变换

一、相关概念

  1. 变换(transform):指的是我们把一些数据,如点、方向矢量甚至颜色等,通过某种方式进行转换的过程。
  2. 线性变换(linear transform):线性变换指的是那些可以保留矢量加和标量乘的变换。例如:缩放、旋转、错切、镜像、正交投影等;
  3. 平移:平移变换不是线性变换,它满足标量乘法,但不满足矢量加法。
  4. 仿射变换(affine transform):合并线性变换和平移变换的变换类型。仿射变换可以使用一个4×4的矩阵来表示,即齐次坐标空间。

二、齐次坐标

    齐次坐标就是将一个原本是n维的向量用一个n+1维向量来表示;对于一个点,从三维坐标转换成齐次坐标是把其w分量设为1,而对于方向矢量来说,需要把其w分量设为0。

三、基础变换矩阵

    我们可以使用一个4×4的矩阵来表示平移、旋转和缩放。我们把表示纯平移、纯旋转和纯缩放的变换矩阵叫做基础变换矩阵。
    根据这些矩阵的一些共同点,我们可以把一个基础变换矩阵分解为4个组成部分:Shader|矩阵:变换 左上角的矩阵 Shader|矩阵:变换 用于表示旋转和缩放, Shader|矩阵:变换 用于表示平移, Shader|矩阵:变换 是零矩阵,即 Shader|矩阵:变换 ,右下角的元素就是标量1。


四、平移矩阵(Shader|矩阵:变换是个单位矩阵,Shader|矩阵:变换为平移矢量)


  • 使用矩阵乘法对一个点进行平移变换:(把点(x,y,z)在空间中平移了(tx,ty,tz)个单位。)

    Shader|矩阵:变换

  • 使用矩阵乘法对一个方向矢量进行平移变换:(平移变换不会对方向矢量产生任何影响。因为矢量没有位置属性。)
   
     Shader|矩阵:变换

  • 平移矩阵的逆矩阵就是反向平移得到的矩阵,即

    Shader|矩阵:变换,平移矩阵并不是一个正交矩阵。


五、缩放矩阵

    我们可以对一个模型沿空间的x轴,y轴和z轴进行缩放。同样,我们可以使用矩阵乘法来表示一个缩放变换。

    Shader|矩阵:变换

    如果缩放系数 k x =k y =k z ,我们把这样的缩放称为统一缩放,否则称为非统一缩放。
缩放矩阵的逆矩阵是使用原缩放系数的倒数来对点或者方向矢量进行缩放,即

    Shader|矩阵:变换,缩放矩阵一般不是正交矩阵。

六、旋转矩阵

  • 绕x轴旋转θ度:
    
    Shader|矩阵:变换

  • 绕y轴旋转θ度:

    Shader|矩阵:变换

  • 绕z轴旋转θ度:

    Shader|矩阵:变换

    旋转矩阵的逆矩阵是旋转相反角度得到的变换矩阵。旋转矩阵是正交矩阵,而且多个旋转矩阵之间的串联同样是正交的。

七、复合变换

    我们可以把平移、旋转和缩放组合起来,来形成一个复杂的变换过程。复合变换可以通过矩阵的串联来实现。在绝大多数情况下,我们约定变换的顺序就是先缩放、再旋转,最后平移。


发布了162 篇原创文章 · 获赞 20 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_39766005/article/details/84851341