轉載自:http://blog.csdn.net/iosevanhuang/article/details/9052165
一、計算機圖形學
計算機圖形學(Computer Graphics)是一種使用數學算法將二維或三維圖形轉化爲計算機顯示器的柵格形式的科學。其廣泛應用於遊戲、動畫、仿真、虛擬現實(VR)、增強現實(AR)等領域。
在數學之中,研究自然數和整數的領域稱爲離散數學,研究實數的領域稱作連續數學。
在計算機圖形學中,爲虛擬世界選擇度量單位的關鍵是選擇離散的精度。一種錯誤的觀點認爲short、int是離散的,而float、double是連續的,而事實上,這些數據類型都是離散的。於是,計算機圖形學有如下準則:
計算機圖形學第一準則:近似原則——如果它看上去是對的,它就是對的。
二、笛卡爾座標系
2D笛卡爾座標系是一個精確定位點的框架。2D座標的標準表示法是(x,y),相信大家初中都學過。一般,標準的笛卡爾座標系是x軸向右,y軸向上。而計算機圖形學中的屏幕座標往往是x軸向右,y軸向下。如圖1所示。
圖1:2D笛卡爾座標系和2D屏幕座標系
3D笛卡爾座標系類似,增加了第三個維度,z軸。3D座標系分爲完全不同的2種座標系,左手座標系和右手座標系。判斷方法爲,左手座標系:伸出左手,讓拇指和食指成“L”形,大拇指向右,食指向上,其餘手指指向前方。此時,拇指、食指和其餘三指分別代表x、y、z軸的正方向。右手座標系,相同,只是把左手換成右手。如圖2所示。
圖2:左手座標系與右手座標系
其中左手座標系廣泛應用於計算機圖形學、D3D之中,而右手座標系廣泛應用於OpenGL、線性代數、3DSMax之中。
三、多座標系
任何一個3D座標系都是可以無限延伸的,可以包含空間中所有的點,因此,只需要一個座標系,就能描述所有的點。但是,人們發現,不同情況下使用不同的座標系會更爲方便。
1.世界座標系
世界座標系是一個特殊的座標系,它描述了其他座標系所需要的參考框架。它是一個座標系系統中最大的、最外部的座標系。“向東”、“向南”這些概念只有在世界座標系中才有。
2.物體座標系
物體座標系是和特定物體相關的座標系。每個物體都有獨立的座標系。“前”、“後”、“左”、“右”這些概念只有在物體座標系中才有意義。
3.攝像機座標系
攝像機座標系是於觀察者密切相關的座標系,它是一種特殊的物體座標系,被定義在攝像機的屏幕可視區域。攝像機座標系中,攝像機在原點,x軸向右,z軸向前(朝向屏幕內或攝像機方向),y軸向上(不是世界的上方而是攝像機本身的上方)。
4.慣性座標系
慣性座標系簡化了世界座標系到物體座標系的轉換。其原點與物體座標系重合,而座標軸與世界座標系平行。
引入慣性座標系的意義在於:物體座標系轉換到慣性座標系只需要旋轉,從慣性座標系轉換到世界座標系只需要平移。
四、向量
對程序猿而言,向量就是一個數組。數組包含的“數”的數目就是向量的維度。一般計算機圖形學中的向量主要討論2維、3維和4維向量。前兩者一般用於2維、3維空間中位置和位移的表示,4維向量一般用於顏色(RGB和透明度alpha)。
任意一個點都可以用從原點開始的向量來表示。
下面就是本章重點之一,向量運算法則(示例皆爲3維向量):
1.負向量
- [ x y z ] = [ -x -y -z ]
幾何意義:向量變負,將得到一個與原向量大小相等,方向相反的向量。
2.向量的模
|| v || = sqrt( x ^ 2 + y ^ 2 + z ^ 2 )
上公式中sqrt表示開方。
幾何意義:向量的長度
3.標量與向量的乘法
k [ x y z ] = [ kx ky kz ]
幾何意義:以因子|k|縮放向量的長度,如果k < 0則向量的方向被倒轉。
4.向量的加減法
[ x1 y1 z1 ] + [ x2 y2 z2 ] = [ x1+x2 y1+y2 z1+z2 ]
[ x1 y1 z1 ] - [ x2 y2 z2 ] = [ x1-x2 y1-y2 z1-z2 ]
幾何意義:向量a和b相加的幾何解釋爲:平移向量,使向量a的頭連接向量b的尾,接着從a的尾向b的頭畫一個向量,這就是向量加法的“三角形法則”。減法與之類似。
5.向量點乘
術語“點乘”來自記法a·b中的點號,點乘中的點乘號不可省略。其優先級高於加法和減法。
[ x1 y1 z1 ] · [ x2 y2 z2 ] = x1x2 + y1y2 + z1z2
幾何意義:點乘結果越大,2個向量越接近。
a·b = || a || || b || cosθ
θ爲兩向量夾角
6.向量叉乘
術語“叉乘”來自於記法aXb中的叉號。叉乘號不能省略。叉乘優先級高於點乘。
[ x1 y1 z1 ] X [ x2 y2 z2 ] = [ y1z2-z1y2 z1x2-x1z2 x1y2-y1x2 ]
叉乘不滿足結合律。滿足反交換律:aXb = -(bXa)
幾何意義:aXb垂直於a、b,指向a、b所在平面的正上方,大小爲以a、b爲兩邊的平行四邊形的面積,即爲||a|| ||b|| sinθ。
五、矩陣
對程序猿來說,向量是一維數組,矩陣就是二維數組。向量是標量的數組,矩陣是向量的數組。
矩陣的運算法則如下:
1.標量與矩陣相乘
| m11 m12 m13 | | km11 km12 km13 |
kM = k | m21 m22 m23 | = | km21 km22 km23 |
| m31 m32 m33 | | km31 km32 km33 |
2.矩陣乘法
只有滿足特定情況,兩個矩陣才能相乘,一個rXn的矩陣A可以和nXc的矩陣B相乘,結果爲一個rXc的矩陣,記爲AB。矩陣乘法滿足結合律,不滿足交換律。
三維矩陣相乘的情況:
| a11 a12 a13 | | b11 b12 b13 |
AB = | a21 a22 a23 | | b21 b22 b23 |
| a31 a32 a33 | | b31 b32 b33 |
| a11b11+a12b21+a13b31 a11b12+a12b22+a13b32 a11b13+a12b23+a13b33 |
= | a21b11+a22b21+a23b31 a21b12+a22b22+a23b32 a21b13+a22b23+a23b33 |
| a31b11+a32b21+a33b31 a31b12+a32b22+a33b32 a31b13+a32b23+a33b33 |
矩陣的幾何意義:矩陣很抽象,一般來說,方陣(行列數相等的矩陣)能描述任意線性變換。下面將具體講述矩陣和線性變換的公式。
六、矩陣和線性變換
1.旋轉
繞單位向量n旋轉θ角度的旋轉矩陣爲:
| nx^2(1 - cosθ)+cosθ nxny(1 - cosθ) + nzsinθ nxnz(1 - cosθ) - nysinθ |
R(n,θ) = | nxny(1 - cosθ)-nzsinθ ny^2(1 - cosθ) + cosθ nynz(1 - cosθ) + nxsinθ |
| nxnz(1 - cosθ)+nysinθ nynz(1 - cosθ) - nxsinθ nz^2(1 - cosθ) + cosθ |
2.縮放
以單位向量n爲縮放方向,k爲因子的縮放矩陣爲:
| 1+(k - 1)nx^2 (k - 1)nxny (k - 1)nxnz |
S(n, k) = | (k - 1)nxny 1+(k - 1)ny^2 (k - 1)nynz |
| (k - 1)nxnz (k - 1)nzny 1+(k - 1)nz^2|
3.正交投影
向垂直於單位向量n的平面的投影矩陣爲:
| 1-nx^2 -nxny -nxnz |
P(n) = | -nxny 1-ny^2 -nynz |
| -nxnz -nzny 1-nz^2 |
4.鏡像
通過原點且垂直於n的平面的鏡像變換矩陣爲:
| 1-2nx^2 -2nxny -2nxnz |
S(n, -1) = | -2nxny 1-2ny^2 -2nynz |
| -2nxnz -2nzny 1-2nz^2 |
5.變換的組合
變換組合在渲染中非常普遍,設想世界中有一任意方向、任意位置的物體,我們要把他渲染到任意方向、任意位置的攝像機中。爲了做到這一點,我們必須將物體的所有頂點從物體座標系變換到世界座標系,接着再從世界座標系變換到攝像機座標系。
其中數學變換如下:
P世界 =P物體M物體->世界
P相機 =P世界M世界->相機=(P物體 M物體->世界)M世界->相機=P物體(M物體->世界M世界->相機)
這樣就能在渲染的循環外先將所有矩陣組合起來,使循環內作矩陣乘法時只需要和一個矩陣相乘即可(省一次矩陣乘法,效率可提高不少)。
三維圖形學中的座標系,向量、矩陣的數學和幾何意義以及公式就到此爲止,本文涵蓋了《3D數學基礎+圖形與遊戲開發》前八章的大部分內容。單純的理論知識是枯燥乏味的,但三維虛擬世界是豐富多彩的,希望閱讀本文的讀者將其作爲三維圖形學基礎知識的筆記來看待。