OpenGL:三維數(shù)學基礎坐標系、向量、矩陣

一、計算機圖形學

計算機圖形學(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所示。

圖1:2D笛卡爾坐標系和2D屏幕坐標系

3D笛卡爾坐標系類似,增加了第三個維度,z軸。3D坐標系分為完全不同的2種坐標系,左手坐標系和右手坐標系。判斷方法為,左手坐標系:伸出左手,讓拇指和食指成“L”形,大拇指向右,食指向上,其余手指指向前方。此時,拇指、食指和其余三指分別代表x、y、z軸的正方向。右手坐標系,相同,只是把左手換成右手。如圖2所示。

image.png

圖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.標量與矩陣相乘

image.png

2.矩陣乘法

只有滿足特定情況,兩個矩陣才能相乘,一個rXn的矩陣A可以和nXc的矩陣B相乘,結果為一個rXc的矩陣,記為AB。矩陣乘法滿足結合律,不滿足交換律。

三維矩陣相乘的情況:


image.png

矩陣的幾何意義:矩陣很抽象,一般來說,方陣(行列數(shù)相等的矩陣)能描述任意線性變換。下面將具體講述矩陣和線性變換的公式。

六、矩陣和線性變換

1.旋轉

繞單位向量n旋轉θ角度的旋轉矩陣為:
image.png

2.縮放

以單位向量n為縮放方向,k為因子的縮放矩陣為:


image.png

3.正交投影

向垂直于單位向量n的平面的投影矩陣為:


image.png

4.鏡像

通過原點且垂直于n的平面的鏡像變換矩陣為:


image.png

5.變換的組合

變換組合在渲染中非常普遍,設想世界中有一任意方向、任意位置的物體,我們要把他渲染到任意方向、任意位置的攝像機中。為了做到這一點,我們必須將物體的所有頂點從物體坐標系變換到世界坐標系,接著再從世界坐標系變換到攝像機坐標系。

其中數(shù)學變換如下:

image.png

這樣就能在渲染的循環(huán)外先將所有矩陣組合起來,使循環(huán)內作矩陣乘法時只需要和一個矩陣相乘即可(省一次矩陣乘法,效率可提高不少)。

三維圖形學中的坐標系,向量、矩陣的數(shù)學和幾何意義以及公式就到此為止,本文涵蓋了《3D數(shù)學基礎+圖形與游戲開發(fā)》前八章的大部分內容。單純的理論知識是枯燥乏味的,但三維虛擬世界是豐富多彩的,希望閱讀本文的讀者將其作為三維圖形學基礎知識的筆記來看待。

來源:https://blog.csdn.net/iosevanhuang/article/details/9052165?utm_source=copy

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。