最近在看《3D數基礎:圖形與遊戲開發》,這篇博文只是大致記錄一下書中的重點知識點,後面會對每一個重點都寫一篇專門的博文來詳細介紹。本文還在持續更新中......
第二章:
左右手座標系,unity使用左手座標系,3D MAX使用右手座標系
第三章:座標系
慣性座標系
在物體座標系與世界座標系中,引入了一個慣性座標系,慣性座標系的原點與物體座標系的原點重合,慣性座標系的軸平行於世界座標系的軸,所以物體座標系到世界座標系的轉換可以通過:1.先旋轉到慣性座標系;2.再平移到世界座標系;來實現。
定位物體在世界中的位置
定位物體的某一個點,只需要知道物體原點(由美工決定)到某一點相對位置,再看世界座標系到物體原點的相對位置,即可計算出某一點在世界座標系中的位置(同一方向座標系可通過旋轉得到)如果某一物體沒有出現在視野中,就不用把每一個點的位置算出,只需要追蹤到原點的位置即可。
嵌套座標系
在世界座標系中追蹤某個複雜物體每一個部分的位置變動是非常困難的,因此,我們使用嵌套座標系,舉個例子,人在走動的時候,人的手在人體座標系中只是繞某一個軸擺動的,人的雙腿也是如此,人的頭髮也只是在Y軸或者Z軸上做改變,而如果把這些座標的計算全部放到世界座標系中,那計算量就太大了。(人座標系相對於人頭座標系,就相當於世界座標系相對於人座標系)
嵌套座標系也能在虛擬世界的座標系中動態的更新,比如,頭髮從人頭上落下來,頭髮的座標系就從人頭座標系變成了世界座標系。
總之,嵌套座標系只是爲了以最方便的方式描述物體。
第四章:向量
第五章:向量運算
零向量、負向量、向量大小(長度或者模);
向量不能乘另一個向量、向量的標準化(向量除以他的模,零向量不能被標準化);
向量的加法滿足交換律,向量的減法不滿足交換律;
距離公式;
點乘(內積,cos)的幾何意義、用途(比如可以變換點乘公式來求投影的長度、求兩向量的方向、夾角,另外,零向量和其他所有向量的點乘結果都爲0,對此的幾何解釋是,0向量和其他所有向量都垂直);
叉乘(外積,||axb||=||a||x||b||sin(a,b)),叉乘和點乘在一起的時候,叉乘優先運算,因爲點乘的結果是一個標量,而標量和向量不能叉乘,叉積可以用來求面積和法向量;
叉積的方向:在一個垂直於你目光的平面上,可以通過把兩個向量首尾相接(axb,則把a的頭和b的尾相接),看是順時針還是逆時針,在左手座標系中,如果是順時針,則指向你,如果是逆時針,則遠離你;
運算a·(bxc)稱作三重積,特殊的性質在第九章記錄;
線性代數公式可以複習一下;
計算平行於某一向量的分量和垂直於某一向量的分量;
第六章:3D向量類
3D向量類的C++實現;
只實現用到最多的方法,只重載必要的運算符;
不要爲2%的性能提升100%的代碼複雜度;
第七章:矩陣
方陣、單位陣、轉置、對角矩陣(所有非對角線元素爲0),矩陣乘法(不滿足交換律、滿足結合律)
線性變換
本書基本使用行向量,少數必要的地方用列向量(如用向量來和矩陣連接)
行向量的話可以直接左乘:vABC,列向量則要右乘:CBAv;
第八章:矩陣和線性變換
變換物體與變換座標系,要根據實際的情況來取捨;(有時變換座標系會方便一點,如旋轉物體的話需要旋轉這個複雜物體上所有的定點,那這個時候我們就可以選擇旋轉座標系)
二維座標系繞原點變換的變換矩陣
左手座標系的順時針旋轉(指從座標軸的正端看向負端)是正方向,右手座標系的順時針旋轉是負方向;
旋轉公式指的是物體在原座標系中的座標的變化,而不是在新座標系中的位置
繞X軸順時針(左手座標系,正方向)旋轉的公式爲:
繞其他軸旋轉的公式也可參考得知,繞任意軸旋轉也一樣(比較複雜)
縮放、投影、鏡像,其實是一個東西(投影:縮放因子爲0,鏡像:縮放因子爲-1)
切變(把某個座標乘以若干個係數,然後加到其他軸上去,比如xy的座標被z軸改變,就是把z軸乘上係數a、b,x軸被係數a乘上z軸所改變,y軸被係數b乘上z軸所改變,記作Hxy),切變後,物體的面積、體積不變。
幾種重要的變換:見表8.8.7
第九章:矩陣的更多知識
行列式,行列式的性質(積的行列式等於行列式的積,可擴展到多個矩陣的情況)、行列式的幾何解釋(類似於叉積,只不過帶符號,表示正向還是負向),行列式的計算(利用代數餘子式,或者選擇主元)
餘子式(矩陣),代數餘子式(值,標量)
矩陣的逆(標準伴隨矩陣除原矩陣的行列式),可用於反向計算或者撤銷上一步計算
正交矩陣,正交矩陣的轉置矩陣和逆矩陣相等,所以如果是正交矩陣,就不用計算逆矩陣,直接用轉置矩陣即可;
矩陣的正交化(施密特算法)
4x4矩陣
因爲3x3矩陣只能表示線性變換,爲了方便計算引入了4x4矩陣;4x4矩陣提供了一種方便表示向量變化的方法,即用第四維表示平移,所以我們可以用4x4矩陣表示線性和非線性的變換,常用的有:平移,透視投影
本文還在持續更新中......