1. 程式人生 > >《3D數學基礎:圖形與遊戲開發》讀書筆記

《3D數學基礎:圖形與遊戲開發》讀書筆記

1.計算機圖形學第一準則:近似原則如果她看上去是對的它就是對的。

2.3D座標系有兩種,左手系和右手系,相同型別的座標系可以通過旋轉來重合,但左手系和右手系之間不可以。左右手座標系轉化可以通過翻轉一個軸的符號來進行。DX左手系,OGL右手系,3dmax右手系,Unity左手系。

3.慣性座標系:為了簡化世界座標系到物體座標系的轉化,是世界座標系和物體座標系轉化的中間過程。慣性座標系原點與物體座標系原點重合,軸與世界座標系平行。從物體座標系轉化到慣性座標系只需要旋轉,從慣性座標系轉化到世界座標系只需要平移。

4.巢狀座標系,將運動按照座標系拆分,找到最合適表示的座標系,複雜的運動就可以變成線性變換工具可以表示的簡單運動。

5.零向量是唯一的沒

有方向的向量。零向量不是點,僅僅表示沒有位移。不能被標準化。

6.三角形法則:[1,-3,4]可以拆分到三個與軸平行的向量:[1,0,0],[0,-3,0],[0,0,4]。

7.向量點乘的幾何解釋:點乘結果描述了兩個向量的“相似”程度,點乘結果越大,兩向量越相近。a`b = ||a|| ||b||cosθ;如果是單位向量就直接表示夾角的cosθ;如果只是判斷方向,與大小無關,可以只看點乘結果的正負,0垂直,>0方向基本相同,<0方向基本相反。

8.從點a到點b的向量AB向量可以看成是向量的減法OB - OA = AB,所以過兩點的向量是終點(箭頭位置b)-開始點(箭尾位置a)

9.單位向量經常被稱作標準化向量,或者簡稱“法線”。任意非0向量都能計算出一個和其方向相同的單位向量,這個過程被稱作標準化。

10.向量叉乘,在左手系中,AB順時針,則結果指向自己,逆時針,背離自己;右手系中,AB順時針,結果背離自己,AB逆時針,結果指向自己。

11.r*c矩陣有r行,c列,mij表示M矩陣的第i行,第j列的數。對角線元素是方陣中行號和列號相等的元素。所有非對角元素都為0的矩陣稱為對角矩陣。單位矩陣是一種特殊的對角矩陣,n*n方陣,對角線元素為1。 1*n矩陣稱為行向量,n*1矩陣稱為列向量。

12.矩陣轉置是沿著對角線翻折,使行向量變成列向量,列向量變成行向量。矩陣轉置的轉置會變回原矩陣。對於任意對角矩陣(單位矩陣),其轉置等於原矩陣。

13.矩陣相乘,r*n矩陣A乘以n*c矩陣B,結果是r*c矩陣C,C的任意元素Cij = A的第i行向量點乘B的第j列向量。矩陣相乘不滿足交換律,但是滿足結合律。矩陣乘積的轉置等於先轉置矩陣再反向相乘。

14.向量與矩陣的乘法:行向量v和矩陣M,乘法方式為左乘,表示為vM,結果為行向量,對於用A,B,C矩陣轉換v時,採用vABC的順序進行乘法,DX使用該方式。列向量v和矩陣M,乘法方式為右乘,表示為Mv,結果為列向量,對於用ABC矩陣轉換v時,寫作CBAv,OpenGL使用該方式。其他兩種方式屬於未定義的方式。矩陣中的元素決定了輸入向量中特定元素在輸出向量中佔的比重。矩陣向量乘法滿足分配率,即(v+w)M = vM + wM。

15.線性變換:線上性空間V上的一個線性變換A,如果V中任意元素a,b,都有A(a + b) = A(a) + B(b),A(ka) = kA(a)。線性變換,旋轉,縮放,正交投影,映象,切變。一個對映F(a) = aM,當M為任意方陣時,說明對映是線性變換。

    仿射變換:仿射變換是指線性變換後平移,仿射變換是線性變換的超集,任何線性變換都是放射變換,但是仿射變換並不一定是線性變換。任何形式的v' = vM + b形式的變換都是仿射變換。

    可逆變換:如果存在一個變換可以撤銷原變換,那麼改變換是可逆的。除了投影變換,其他變換都是可逆的。如果矩陣是奇異的,變換不可逆,可逆矩陣的行列式不為0.

    等角變換:變換前後兩個向量的夾角的大小,方向都不改變,說明變換是等角的。只有平移,旋轉和均勻縮放是等角變換。所有等角變換都是仿射和可逆的。

    正交變換:正交變換軸保持互相垂直,而且不進行縮放變換。長度,角度,面積,體積保持不變。很容易求出正交變換的逆。只有平移,旋轉和映象是正交變換,正交矩陣的行列式為+-1,所有正交矩陣都是仿射和可逆的。

    剛體變換:只改變物體的位置和方向,不包括形狀?。所有長度,角度,面積,體積都不變。只有平移和旋轉是剛體變換。剛體變換被稱為正規變換,所有剛體變換都是正交,等角,可逆和仿射的。

16.如果把矩陣的行解釋為座標系的基向量,那麼乘以該矩陣就相當於做了一次座標變換,vM = w,稱之為M將v變換到w。用基向量[1,0,0]與任意矩陣M相乘,得到[m11,m12,m13],得出的結論是矩陣的每一行都可以解釋為轉化後的基向量。根據該結論,就可以通過一個期望的變換,反向構造出一個矩陣來代表這個變換。

17.可以變換物體,也可以變換座標系。兩種變換實際上是等價的,將物體變換一個量等價於將座標系變換一個相反的量。根據實際情況進行選擇。

18.通過矩陣連乘結合律,多個矩陣對頂點進行變換時,如vMVP,先計算MVP矩陣,然後傳遞給shader,就可以將每個頂點進行三次矩陣計算的時間消耗降低為一次矩陣變換的時間。v(MVP)

19.正交投影是降維操作,類似縮放矩陣,某個維度的縮放因子為0時,這個維度就被幹掉了。這個操作是不可逆的。映象也類似於縮放矩陣,只是縮放因子為-1時,就會映象。

20.方陣M^-1與M相乘為I(單位矩陣)。並非所有方陣都有逆矩陣,如果一個矩陣一行或一列元素均為0,就不可逆。如果一個矩陣有逆矩陣,可以稱之為非奇異的;沒有逆矩陣可以稱之為不可逆的或奇異矩陣。對於任意可逆矩陣M,當且僅當v = 0時,vM = 0。矩陣轉置的逆等於逆的轉置。

21.正交矩陣:若方陣M是正交的,當且僅當M與它轉置M^T的乘積等於單位矩陣=>正交矩陣的轉置等於它的逆矩陣。旋轉矩陣和映象矩陣是正交的。如果M是正交的,則M^T也是正交的。

22.矩陣正交化,壞資料或浮點運算累積錯誤(矩陣爬行)導致矩陣不正交。進行施密特正交化,

23.齊次座標系: 2維齊次座標(x,y,w),在三維平面w = 1處的標準2D平面,點(x,y)用齊次座標可以表示為(x,y,1),而那些不在w = 1平面上的點,則將它們投影到w = 1平面上。所以,齊次座標(x,y,w)對映的實際2D點為(x/w,y/w)。給定一個點(x,y),齊次空間中有無數點與之對應,所有點的形式都為(kx,ky,k) ,k !=0,這些點構成了一條過齊次原點的直線。當w = 0時,因為除法未定義,因此不存在實際的2D點,我們可以將(x,y,0)解釋為位於無窮遠的點,可以用其描述一個方向而不是位置。在3維上同理,因而對於齊次座標來說,我們可以通過最後一個維度w來判斷一個向量表示的是方向還是位置,為0時表示方向,為1時表示位置。

24.我們可以用4x4矩陣來包含平移變換,向量的w分量可以開關4x4矩陣的平移部分。因而4x4矩陣可以描述更多的變換。基本思想是TRT^-1的形式,現將變換中心點移動到原點,進行線性變換,然後再將中心點平移回去。

25.通過齊次座標變換,要把4D向量除以w,這個除法可以讓我們更簡潔地做一些幾何運算,也就是透視投影。從4D到3D變換意味著透視除法,因此我們可以用4x4矩陣來編寫程式碼,實現透視投影。基本思想是給一個p'公式,其中的x,y,z有公分母,然後構造一個4x4矩陣,使w與這個公分母相等。假設初始點w = 1.

x' = dx/ z,y' = dy/z, z' = d => p' = [dx/z, dy/z, d] = [dx/z, dy/z, dz/z] => [x, y, z]/ (z/d) =>齊次座標[x, y, z, z/d]