一、計算機圖形學
計算機圖形學(Computer Graphics)是一種使用數(shù)學算法將二維或三維圖形轉化為計算機顯示器的柵格形式的科學。其廣泛應用于游戲、動畫、仿真、虛擬現(xiàn)實(VR)、增強現(xiàn)實(AR)等領域。
在數(shù)學之中,研究自然數(shù)和整數(shù)的領域稱為離散數(shù)學,研究實數(shù)的領域稱作連續(xù)數(shù)學。
在計算機圖形學中,為虛擬世界選擇度量單位的關鍵是選擇離散的精度。一種錯誤的觀點認為short、int是離散的,而float、double是連續(xù)的,而事實上,這些數(shù)據(jù)類型都是離散的。于是,計算機圖形學有如下準則:
計算機圖形學第一準則:近似原則——如果它看上去是對的,它就是對的。
二、笛卡爾坐標系
2D笛卡爾坐標系是一個精確定位點的框架。2D坐標的標準表示法是(x,y),相信大家初中都學過。一般,標準的笛卡爾坐標系是x軸向右,y軸向上。而計算機圖形學中的屏幕坐標往往是x軸向右,y軸向下。如圖1所示。
3D笛卡爾坐標系類似,增加了第三個維度,z軸。3D坐標系分為完全不同的2種坐標系,左手坐標系和右手坐標系。判斷方法為,左手坐標系:伸出左手,讓拇指和食指成“L”形,大拇指向右,食指向上,其余手指指向前方。此時,拇指、食指和其余三指分別代表x、y、z軸的正方向。右手坐標系,相同,只是把左手換成右手。如圖2所示。
圖2:左手坐標系與右手坐標系
其中左手坐標系廣泛應用于計算機圖形學、D3D之中,而右手坐標系廣泛應用于OpenGL、線性代數(shù)、3DSMax之中。
三、多坐標系
任何一個3D坐標系都是可以無限延伸的,可以包含空間中所有的點,因此,只需要一個坐標系,就能描述所有的點。但是,人們發(fā)現(xiàn),不同情況下使用不同的坐標系會更為方便。
1.世界坐標系
世界坐標系是一個特殊的坐標系,它描述了其他坐標系所需要的參考框架。它是一個坐標系系統(tǒng)中最大的、最外部的坐標系?!跋驏|”、“向南”這些概念只有在世界坐標系中才有。
2.物體坐標系
物體坐標系是和特定物體相關的坐標系。每個物體都有獨立的坐標系。“前”、“后”、“左”、“右”這些概念只有在物體坐標系中才有意義。
3.攝像機坐標系
攝像機坐標系是于觀察者密切相關的坐標系,它是一種特殊的物體坐標系,被定義在攝像機的屏幕可視區(qū)域。攝像機坐標系中,攝像機在原點,x軸向右,z軸向前(朝向屏幕內或攝像機方向),y軸向上(不是世界的上方而是攝像機本身的上方)。
4.慣性坐標系
慣性坐標系簡化了世界坐標系到物體坐標系的轉換。其原點與物體坐標系重合,而坐標軸與世界坐標系平行。
引入慣性坐標系的意義在于:物體坐標系轉換到慣性坐標系只需要旋轉,從慣性坐標系轉換到世界坐標系只需要平移。
四、向量
對程序猿而言,向量就是一個數(shù)組。數(shù)組包含的“數(shù)”的數(shù)目就是向量的維度。一般計算機圖形學中的向量主要討論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中的點號,點乘中的點乘號不可省略。其優(yōu)先級高于加法和減法。
[ x1 y1 z1 ] · [ x2 y2 z2 ] = x1x2 + y1y2 + z1z2
幾何意義:點乘結果越大,2個向量越接近。
a·b = || a || || b || cosθ
θ為兩向量夾角
6.向量叉乘
術語“叉乘”來自于記法aXb中的叉號。叉乘號不能省略。叉乘優(yōu)先級高于點乘。
[ 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θ。
五、矩陣
對程序猿來說,向量是一維數(shù)組,矩陣就是二維數(shù)組。向量是標量的數(shù)組,矩陣是向量的數(shù)組。
矩陣的運算法則如下:
1.標量與矩陣相乘
2.矩陣乘法
只有滿足特定情況,兩個矩陣才能相乘,一個rXn的矩陣A可以和nXc的矩陣B相乘,結果為一個rXc的矩陣,記為AB。矩陣乘法滿足結合律,不滿足交換律。
三維矩陣相乘的情況:
矩陣的幾何意義:矩陣很抽象,一般來說,方陣(行列數(shù)相等的矩陣)能描述任意線性變換。下面將具體講述矩陣和線性變換的公式。
六、矩陣和線性變換
1.旋轉
繞單位向量n旋轉θ角度的旋轉矩陣為:2.縮放
以單位向量n為縮放方向,k為因子的縮放矩陣為:
3.正交投影
向垂直于單位向量n的平面的投影矩陣為:
4.鏡像
通過原點且垂直于n的平面的鏡像變換矩陣為:
5.變換的組合
變換組合在渲染中非常普遍,設想世界中有一任意方向、任意位置的物體,我們要把他渲染到任意方向、任意位置的攝像機中。為了做到這一點,我們必須將物體的所有頂點從物體坐標系變換到世界坐標系,接著再從世界坐標系變換到攝像機坐標系。
其中數(shù)學變換如下:
這樣就能在渲染的循環(huán)外先將所有矩陣組合起來,使循環(huán)內作矩陣乘法時只需要和一個矩陣相乘即可(省一次矩陣乘法,效率可提高不少)。
三維圖形學中的坐標系,向量、矩陣的數(shù)學和幾何意義以及公式就到此為止,本文涵蓋了《3D數(shù)學基礎+圖形與游戲開發(fā)》前八章的大部分內容。單純的理論知識是枯燥乏味的,但三維虛擬世界是豐富多彩的,希望閱讀本文的讀者將其作為三維圖形學基礎知識的筆記來看待。
來源:https://blog.csdn.net/iosevanhuang/article/details/9052165?utm_source=copy