Unity中的矩陣含義

Unity中的矩陣含義

本人第一次寫博文,不足的地方請大家指出來,我不會詳解它的計算是什麼樣的,因爲同類文章有很多,這個如果讀者感興趣可以自己學習一下相關的手冊和知識。

什麼是矩陣

簡單的說,矩陣就是一個4*4的二維數組,在Unity中爲結構體,Matrix4x4就是Unity中的矩陣,你可以通過這個結構體來申請一個矩陣,當然這是個三維矩陣。
1.矩陣每一列的意義:
如果是一個單位正交矩陣,那麼在Unity中他就是這樣的
在這裏插入圖片描述
如果這是一個遊戲物體的變換矩陣,那麼就可以得出以下信息,

1.該遊戲物體的X,Y,Z,軸的方向與世界座標系的X,Y,Z軸的方向保持一致,簡單的來說,該物體相對於世界座標系沒有發生任何旋轉;
2.該物體的在世界座標系中的座標爲(0, 0, 0)。
矩陣的作用:

  1. 矩陣可以說是Transform組件工作的根本,Transform所需的基本信息都從該單位的矩陣中獲得;
  2. 旋轉矩陣: 我這裏不貼出旋轉矩陣,因爲你幾乎用不到它,而且網上關於旋轉矩陣的文章也有很多,我不做詳述,告訴讀者兩個矩陣相乘是沒有意義,這個過程太過於抽象,我會在“實踐”中具體講解。

結構體Matrix4x4

接下來介紹Matrix4x4結構體(當然我不會把所有的方法和變量都講出來,我會說一些我們可能會經常用到的方法或者變量):
1.變量:
Rotation:這裏的Rotation是對應Transform組件裏的Rotation的,也就是說,你可以通過重構旋轉矩陣來得到一個Rotation並且運用到任意一個遊戲物體上;
lossyScale:你可以通過這個值來得到一個矩陣所代表物體的尺寸大小;
inverse:倒置,你可以用這個變量來獲取一個矩陣的倒置矩陣。
2.函數:
public Matrix4x4(Vector4 column0, Vector4 column1, Vector4 column2, Vector4 column3) :通過該構造函數來構造出一個自己的矩陣;
public static Matrix4x4 Inverse(Matrix4x4 m) : 獲取一個矩陣的倒置矩陣。

實踐

我之前說過,矩陣矩陣中每一列的含義,接下來我會在Unity中證明這些含義的真確性:
1.前三列的意義:
如果把矩陣的前三列拿出來,每一列數據都可以組成一個Vector3變量,這三個變量分別代表了,物體的X,Y,Z軸的方向,也就是物體的自身座標系;
在這裏插入圖片描述

這是我重構了一個物體的矩陣後,再將該矩陣的前三列值取出,組成三個單位向量,再使用Debug.DrawRay進行繪製而得到的,你可以很清楚的看的根據前三列值所構建出的方向向量會和物體的座標軸朝向保持一致。
下面是代碼:

matrix = new Matrix4x4(this.transform.right, this.transform.up, this.transform.forward, new Vector4(0, 0, 0, 1));

    Debug.DrawRay(Vector3.zero, new Vector3(matrix[0, 0], matrix[1, 0], matrix[2, 0]).normalized, Color.red);
    Debug.DrawRay(Vector3.zero, new Vector3(matrix[0, 1], matrix[1, 1], matrix[2, 1]).normalized, Color.green);
    Debug.DrawRay(Vector3.zero, new Vector3(matrix[0, 2], matrix[1, 2], matrix[2, 2]).normalized, Color.blue);

構建矩陣的原則:
1. Matrix4x4結構體的構造方法會接收4個Vector4的值,把他們對應到物體,這4個值分別代表物體的·
X,Y,Z軸的方向向量(Vector3會隱式轉化爲Vector4變量),且前三個向量必須爲標準正交基向量,以及一個位置信息,完成上述操作你就可以獲取當前的Rotation值,當然是通過你構建的這個矩陣。
注意:Matrix4x4構造函數的第四個變量是一個Vector4變量,且必須是它,因爲要保持矩陣的對角線上的值不爲0,否則在進行矩陣計算時會出現錯誤,導致不能得到正確的結果。
2. 填入的向量必須是一組標準正交基。

注意:也許你會說,我做的是一個廢操作,因爲矩陣在初始化是就會把對應的值填入,所以即使不用矩陣去做,直接用自身的三個方向作爲方向輸出結果還是一樣的,其實這是不同的,如果你明白了這矩陣前三列代表的意義,你就可以隨時構建一個任意方向的變換。這也與我文章的主題相符合。

結尾

這是我第一篇文章,這篇文章寫的是我對矩陣的理解與運用,重在運用上,希望可以幫讀者加快對矩陣的理解,我翻閱了一下網上的文章,大多數文章講的都太過繁瑣,因爲畢竟不是每個人的數學水平都很好,所以我在文中沒有寫一段數學計算,以我自己的經驗看,擺出數學公式,不僅不會對自己的理解有幫助,反而會增加自己的疑慮,所以我選擇了一個簡單粗暴的方式,直接拿出值去試,事實證明是有效果的。如果有寫得不夠好的地方請儘管提出,但是如果你說我誤導人的話,那我就會罵你祖宗十八代的,因爲以我實踐效果看是沒有問題的。可能有不合適的一些話,我會積極改正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章