[OpenGL]OpenGL幾何變換的祕密--萬變不離其宗

1.變換的步驟(萬變不離其宗)

我們先來看圖形流水線,圖形的幾何變換都是在頂點處理階段進行變換,主要包括四個步驟:幾何變換 ->投影變換->裁減->視口變換
在這裏插入圖片描述
具體的流程可以來看下(見下圖):
①首先我們的視點所能看到的東西會處於一個視椎體中(詳情可查看OpenGL基礎知識一文),比近平面還近的和比遠平面還遠的,我們都默認看不到
②當一個紅色的三角形處於視椎體中,投影到投影平面上,
③我們的電腦屏幕上會打開一個窗口,窗口所能看到的就是我們的投影窗口,即視口,超過視口的部分會被裁減
實際上在做操作的時候是先裁減,纔將圖形變成屏幕上我們看到的樣子(個人猜想:是爲了不受設備所影響,所以先把該處理的都在模擬的空間裏先提前處理,歡迎評論提出意見看法原因)
在這裏插入圖片描述

2.三種幾何變化

①平移(glTranslate)

老規矩,上圖,平移:把各個頂點移到其他位置
在這裏插入圖片描述
把P(x,y,z)點移到P’(x’,y’,z’),正常我們把平移寫成矩陣形式爲左邊矩陣表達式,但是多了一個加法,所以我們變成了4維齊次矩陣,也就是右邊的形式
在這裏插入圖片描述

②放縮(glScale)

放縮實際上就是在原頂點座標的基礎上進行放大或者縮小
在這裏插入圖片描述

敲黑板!!!!!!!
我們可以注意到,我們是以原點進行放縮,所以三角形的位置會偏移,那很多人會說我們怎麼在原地放縮?
我們可以採用組合的方式來進行放縮,先將三角形平移到原點,再放縮,然後再按照相同距離平移回去

在這裏插入圖片描述

③旋轉(glRotate)

在這裏插入圖片描述
現在有人會問,如果想繞任意方向的旋轉軸旋轉怎麼辦?
我們以要確定的旋轉軸爲z軸重新構建座標系,計算頂點在新的座標系中的座標,繞z軸旋轉,然後再變回原座標系
在這裏插入圖片描述

延伸

爲什麼要把各種變換表示成矩陣運算?
連續變換的矩陣可以組合成一個矩陣,變換的組合就是矩陣相乘
例如,一個放縮矩陣爲A,一個旋轉矩陣爲B,我們對(x,y,z)進行變換,既爲左下角的矩陣示意圖,當我們先將A和B相乘,即M = BA,在對(x,y,z)進行操作,可以提高計算效率。。
當我們有10000個點需要操作的時候,如果按照原來的方式,我們需要操作20000次,但是當我們先計算複合矩陣,這個操作只需要10001次
在這裏插入圖片描述
圖形硬件適合運算矩陣向量(個人猜想,歡迎指出錯誤)

3.幾何變換應用

在OpenGL裏面,所有的變化都是矩陣的計算
例如,當我們先進行平移操作T1,再進行旋轉操作T2,實際上就是先算出兩個變化的複合矩陣,再對點進行操作
在這裏插入圖片描述
①先介紹一個函數glLoadIdentity,此函數作用是單位矩陣,當我們進行變換的時候可以將當前模型變換矩陣先變成單位矩陣,再計算變化矩陣,再對圖元進行操作,圖元的定義可見OpenGL基本語法
在這裏插入圖片描述
②當我們想對不同的圖元進行不同的操作時,我們可以先操作p1,然後再操作p2
(注意,每次操作完某個圖元,要對其他圖元進行操作時,要重新置當前模型矩陣爲單位矩陣)
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章