在Unity开发中时常会用到Matrix4x4矩阵来变换场景中对象的位置、旋转和缩放。可是不少人都不太理解这儿Matrix4x4变换矩阵。经过DX中的变换矩阵我来说一讲在unity中这个变换矩阵是怎么变换的。函数
在三维图形程序中,咱们能够用几何变换来达到如下目的:orm
表示一个对象相对于另外一个对象的位置。对象
旋转和安排对象的大小。blog
改变视维、方向和透视方法。开发
你可使用一个4×4的矩阵将任何点变换到另外一个点。下面的例子中,咱们用一个矩阵对点(x, y, z)进行变化,产生了一个新的点(x', y', z'):get
对点(x, y, z)进行一下运算,会获得一个新点(x', y', z'):it
最经常使用的变换包括:平移(translation),旋转(rotation)和缩放(scaling)。你能够将这些变换合并起来,组成一个矩阵,同时进行几种变换。io
矩阵以行列号的形式来描述。form
沿每一个坐标轴同时进行缩放时(咱们称为统一缩放uniform scaling),矩阵以下所示:程序
下面的变化将一个点(x, y, z)平移到另外一个点(x', y', z'):
下面的变换将一个点(x, y, z)沿x-轴进行旋转,获得了一个新的点(x', y', z'):
下面的变化沿y-轴进行旋转:
下面的变换沿z-轴进行旋转:
这里要注意一点,希腊字母θ表明旋转的角度,用弧度来表示。从旋转轴向原点看,这个角度按顺时针方向来度量。
咱们使用矩阵的一个最大好处就是能够经过矩阵相乘来将几个矩阵变换的效果合并起来。这就是说,当咱们对一个模型进行旋转和平移时,再也不须要用到两个矩阵。咱们能够经过将旋转矩阵与平移矩阵相乘来获得一个合并的矩阵。这一过程就被称为矩阵级联,能够用下面的公式来表示:
共识中,C指组合以后产生的新矩阵,M1到Mn表示要组合在一块儿的每个矩阵。通常状况下,咱们指将两或三个矩阵组合起来,但其实是没有限制的。 Matrix4x4类中有一个Matrix4x4.operator * 辅助函数来进行矩阵级联运算。 在进行矩阵级联时,咱们应该注意级联时的顺序。上面公式 中反映的是一种从右到左的矩阵级联规则。也就是说,咱们用来建立一个合并的矩阵的每一个矩阵的实际效果是从右到左依次出现的。下面咱们举一个例子来讲明这一 状况。在这个例子中,咱们要经过世界变换矩阵来建立一个“飞碟”。咱们想要这个UFO沿中心(模型空间的y-轴)来旋转,同时要在场景中平移。为了达到这样的效果,你能够首先建立一个平移矩阵,而后用它和旋转矩阵相乘,以下所示:W=Tw·Ry 公式中,Tw表示平移矩阵,Ry表示旋转矩阵。 两个矩阵相乘的顺序是很重要的,与标量的相乘不一样,矩阵相乘的顺序是不能交换的。若是咱们将两个矩阵的顺序交换的话,获得的结果就会是,先对飞碟进行平移,而后将它绕世界原点进行旋转。 不管咱们建立什么类型的矩阵,都要按照从右到左的顺序,这样才能达到咱们预期的结果。