天天看點

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

OpenGL圖形開發入門筆記

前篇我們完成了OpenGL的環境搭建,在進入OpenGL程式設計之前,我覺得有必要對計算機圖形學的基礎理論進行一下簡單的學習和梳理。為此,本文借助《OpenGL程式設計精粹》進行歸納學習和整理。

01 點

點是圖形中最基本的幾何對象。一般的,利用直角坐标系表示來确定物體在螢幕中的位置。坐标系分為左手坐标系、右手坐标系。OpenGL采用右手系。

重點内容

2D坐标(X,Y)

2D的距離公式

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

3D坐标(X,Y,Z)

3D的距離公式

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

02 向量

标量是個表示數量大小的值,差別于标量,向量是個既有方向又有大小的量。

2.1向量的大小

即向量的長度或模。

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

2.2向量的歸一化

求一個向量的機關向量的過程,叫做向量的歸一化。

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

2.3向量的四則運算

加減:加減要注意向量的維數必須相同,對應分量加減運算即可。

向量點乘(也稱作内積):對應分量乘積的和;點乘的結果描述了兩個向量的相似程度,結果越大兩個向量越越近。

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

向量叉乘(也稱作叉積):僅可用于3D場景,和點乘不太一樣的是,叉乘之後得到一個新的向量,為此,叉乘運算在3D圖形學上可用于諸多領域,例如碰撞檢測、光照和實體計算等,運算常采用後面所說的矩陣運算。

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

03 矩陣

矩陣是3D數學的重要基礎,對于坐标系的轉換和物體的變換都要用到矩陣

OpenGL涉及的内容有

3.1幾個常用的矩陣概念

方陣

行數和列數相同的矩陣。

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

對角矩陣

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

對角元素不全為0,非對角元素為0的矩陣。

機關矩陣

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

對角元素全為1的對角矩陣。

3.2矩陣的常用運算

矩陣的加減

矩陣乘法

标量和矩陣相乘、

向量(看成一維矩陣)和矩陣相乘、

矩陣和矩陣相乘。

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記
OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記
OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

04變換

CSDN部落客kuweicai的變換解析

在圖形的開發過程中,我們經常要對物體進行一些幾何變換操作,這也是計算機圖形學當中的核心内容。其中最基本的三種變換是平移、旋轉、縮放。

4.1平移變換

就是對坐标進行一下簡單變換。

x’ =x+tx

y’ =y+ty

4.2旋轉變換

二維旋轉變換

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

三維旋轉變換

CSDN部落客qiuqchen的推導過程

繞X軸

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

繞Y軸

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

繞Z軸

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

4.3縮放變換

‘’

縮放公式用矩陣表示為:

坐标(x,y)以原點為中心,縮放Sx、Sy倍,則縮放矩陣為:

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

4.4齊次坐标

齊次坐标就是将一個原本是n維的向量用一個n+1維向量來表示,是指一個用于投影幾何裡的坐标系統,如同用于歐氏幾何裡的笛卡兒坐标一般。

《計算機圖形學(OpenGL版)》的作者F.S. Hill Jr.曾說過一句話:

“齊次坐标表示是計算機圖形學的重要手段之一,它既能夠用來明确區分向量和點,同時也更易用于進行仿射(線性)幾何變換。”

目前OpenGL及Direct3D圖形卡均利用齊次坐标的優點,以具4個暫存器的向量處理器來實作頂點着色引擎。

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

05投影

在3D圖形學中,需要涉及兩種基本的投影方式:

平行投影

三維物體的坐标沿平行線投影到觀察平面上,它保持物體的有關比例不變,在三維空間保持平行的直線經平行投影後依然保持平行。

根據标準線與投影面的夾角不同,還可以分成正交平行投影和斜角平行投影。

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

透視投影

透視投影是将投影平面置于觀察點與投影對象之間的一種投影。這種投影産生對物體真實的觀察效果,離觀察者越遠的物體形成的投影圖越小。

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

06裁剪

在圖形的顯示過程中,我們還可以通過定義一個觀察體(稱作視體)來對場景進行裁剪。隻有在視體中的那些物體才能在輸出裝置中顯示,所有其他物體均被裁剪掉。觀察體的大小依賴于視窗的大小,而觀察體的形狀依賴于生成顯示結果的投影類型。

在z方向限制觀察體的容量,可以得到一個有限觀察體。這可以通過在觀察體的前後各增加一個平面來實作,這兩個平面被稱為觀察體的前平面和後平面或者近平面和遠平面。兩個平面必須在投影參考點的同一側,後平面與投影參考點的距離要大于前平面的距離,這樣産生的觀察體包括6個面。對于正平行投影,6個面形成一個矩形平行六面體;在透視投影中,前後截面将無限棱錐觀察體截成棱台。

OpenGL學習之旅(二)——計算機圖形學學習筆記OpenGL圖形開發入門筆記

07光照

要成具有真實感的因形,一方面要有物體的精确模型資訊表示,另一個重要的方面就是光照效果的使用。為此我們也需要建立一些必要的光照模型, 光照模型包括許多因素,如物體類型、物體相對于光源的距離以及所設定的光源屬性等。

下面就介紹基本的光照模型。

7.1環境光

在基本的光照模型中,隻須改變一個場景的基準光亮度,即可簡單地模拟一種從不同物體表面所産生的發射光的同一照明, 稱為環境光( ambient light)。 環境光是沒有空間或方向上的特征的,也就是說,在所有方向上和所有物體表面上投射的環境光的數量是恒定不變的。

需要注意的是,在環境光的作用下,雖然各個表面都得到相同數量的光照,但是各個面上的反射光強度卻不一定相同,這還取決于各個表面的材質屬性。

7.2漫射光

在真實世界中,我們經常見到的光線都是由某些固定的光源發出的,它們總是從某一個方向照射到物體上,而不像我們在讨論環境光時那樣不用考慮光線的方向。為了模拟這種情況的反射效果,我們在考慮反射表面屬性的同時,還要考慮光源的位置和類型。我們将光源分為點光源、聚光源以及方向光。漫反射模型就是指物體表面把這些光線均等地反射到各個方向。

7.3鏡面反射光

當我們觀察一個光照下的光滑物體表面,如光滑的金屬時,可能在某個觀察方向看到高光或強光,這個現象稱為鏡面反射,因為在接近鏡面反射角的一個會聚區城内,人射光的全部或絕大部分成為反射光。

參考文獻

《OpenGL程式設計精粹》

CSDN、部落格園部落客已在文中辨別,一并緻謝!

圖檔侵删。

繼續閱讀