[Unity] 3D數學基礎 - 坐標系、向量、矩陣


一、坐標系

模型坐標系:

物體自身的坐標系,只描述自身各個頂點的情況。

在3D模型坐標系中,z方向前向如果是負值,我們稱為右手坐標系,如果是正值,我們稱為左手坐標系。在3DMax中使用了右手坐標系,Unity使用了左手坐標系。

 

世界坐標系:

系統的絕對坐標系,在沒有建立用戶坐標系之前畫面上所有點的坐標都是以該坐標系的原點來確定各自的位置的。

 

攝像機坐標系:

攝像機坐標系是和觀察者密切相關的坐標系。攝像機坐標系和屏幕坐標系相似,差別在於攝像機坐標系處於3D空間中而屏幕坐標系在2D平面里。攝像機坐標系能被看做是一種特殊的“物體”坐標系,該“物體”坐標系就定義在攝像機的屏幕可視區域。攝像機坐標系中,攝像機在原點,x軸向右,z軸向前(朝向屏幕內或攝像機方向),y軸向上(不是世界的上方而是攝像機本身的上方)。

 

屏幕坐標系:

屏幕投影過后的坐標系。它是一個2D的坐標系。投影分為兩種,透視投影(近大遠小)和正交投影(不管物體的遠近,大小不變)。

 

從以上四種坐標系統來看,我們要演變它的過程到最后屏幕上我們能看到的畫面,需要經過模型坐標系、世界坐標系、攝像機坐標系,再投影到屏幕上的變換過程。

 

二、 向量

 

向量,就是有方向的量,只有方向和長度,沒有位置信息。我們在考察向量時,總是以世界坐標系的原點,向它所在的方向投射指定的長度。

 

2D向量: (x, y)

3D向量: (x, y, z)

4D向量: (x, y, z, w)

 

存在4D向量主要是要和矩陣進行計算。

 

向量加法: 將向量的各項分別相加。

 

V1 = (1, 0), V2 = (0.5, 0.5)

V3 = V1 + V2 = (1, 0) + (0.5, 0.5) = (1.5, 0.5)

 

向量減法: 將向量的各項分別相減。

 

V1 = (0.7, 1.5), V2 = (0.5, 0.5)

V3 = V1 + V2 = (0.7, 1.5) - (0.5, 0.5) = (0.2, 1.0)

 

向量和標量的乘法: 把標量和向量中的每個分量分別相乘。

 

V = (1, 2, 2), D = 2

R = V * D = 2 * (1, 2, 2) = (2, 4, 4)

 

向量點積: 發生在向量和向量之間。點積的結果是一個標量值。

 

V1 = (1, 0)

V2 = (0.5, 0.866)

 

點積 = Dot(V1, V2) = V1 * V2 = (1, 0) * (0.5, 0.866) = (1*0.5 + 0*0.866) = 0.5

 

向量點積的幾何意義:

Dot(V1, V2) = ||V1|| * ||V2|| * cos(ɑ)

cos(ɑ) = Dot(V1, V2) / (|V1|| * ||V2||)

當V1和V2都是規范化向量時:

cos(ɑ) =V1*V2

ɑ = acos(V1*V2) = acos(0.5) = 60度

其實就是acos(點積)。

點積為1,角度為0度,點積為0,角度為90度。

 

通過此性值,我們可以知道兩個向量的夾角是多大。一般的情況是,只要夾角小於90度,他們的點積總是>0,如果夾角剛好是90度,點積則=0,如果夾角大於90度,點積會是一個負數。

 

向量叉積: 運算結果還是一個向量。它的運算法則是交叉相乘。

 

V1 = (1, 0, 0)

V2 = (0, 1, 0)

 

 

 

向量叉積的幾何意義

 

兩個向量的叉積得到了新的向量,它垂直於原來的兩個向量所在平面。當某個向量垂直於一個平面,可以看作這個平面的法向量。

叉積運算是有順序的, V1 x V2 和 V2 x V1 的叉積值是不一樣的。順序不同,新的法向量的方向是相反的。

 

 

三、矩陣

 

矩陣的維度和記法

矩陣是一個類似於二維數組的東西,但在數學概念上是完全不一樣的。矩陣的下標是(1, 1)開始,數組是(0, 0)開始。在數學上,我們一般用大寫的M來表示矩陣。

 

 

 

矩陣的轉置

 

矩陣的轉置就是把矩陣的行變成列。比如把第一行變成第一列,第二行變成第二列。

 

向量也可以看作一種矩陣。有時候我們會說行向量、列行量,其實我們是以矩陣的概念來看它。

 

矩陣和標量的乘法

 

一個矩陣和標量相乘,就是用標量與矩陣每一個元素依次相乘。得到的矩陣與原矩陣的維度是一樣的。

 

矩陣和矩陣的乘法

 

用第一個矩陣的第一行的每個分量,與第二個矩陣的第一列的分量相乘,將結果相加,得到新的分量。

 

 

矩陣與矩陣相乘,其結果與兩個矩陣的順序是有關的,不同的順序,結果是不一樣的。

 

兩個內部維度不同的矩陣是不能夠相乘的。

 

一個 N * M階與S * T階矩陣相乘,必須滿足 M和S維度相同,乘法結果是一個N * T階矩陣。

 

 

一個列向量是不能與一個3x3矩陣相乘的,但一個3x3 矩陣可以乘以一個列向量。

一個行向量可以與一個3x3矩陣相乘。

一個行向量乘以一個3x3矩陣,結果與一個相同的3x3矩陣轉置后乘以相同的行向量一樣,結果是一個向量(但一個是行向量,一個是列向量)。

 

單位矩陣

 

在矩陣中,從左上角到右下角這樣的一條線我們稱為主對角線。在主對角線上所有元素的值都是1,其它元素為0的矩陣,我們稱為單位矩陣。

 

 

單位矩陣A乘以另一個矩陣B,結果矩陣為B。也就是說單位矩陣乘以一個矩陣,它不會改變這個矩陣的元素。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM