[OpenGL]OpenGL幾何變換的祕密(模型變換、視點變換、全局變換、局部變換)

1.模型變換(Model transformation)---- 視點不變,變物體

我們在OpenGL中通過定義一組頂點來定義一個模型,我們遇到的平移、縮放、旋轉等變換都可以理解爲模型變換,視點不變,主要對物體進行操作。

在OpenGL中,我們使用glMatrixMode(GL_MODELVIEW)來處理模型變換,我們知道OpenGL使用堆棧管理矩陣,所以我們有不同的堆棧進行管理,有模型變換矩陣堆棧,視點變換矩陣堆棧,還有紋理變換矩陣堆棧等等,這句話就是告訴OpenGL,我們要處理模型變換。

2.視點變換(View transformation)---- 物體不變,變視點

OpenGL成像主要是採用虛擬相機模型,在場景中我們通過模型變換,將物體放在場景中不同的位置,最終哪些部分需要顯示在屏幕上,主要是由視點變換、投影變換等決定。視點變換階段,我們通過假想的相機來處理矩陣計算。,所謂的視點空間,視點座標系都是爲了方便處理,引入的座標空間。
在OpenGL中,我們主要使用

gluLookAt(eyex,eyey,eyez,centerx,centery,centerz,upx,upy,upz)

來達到模擬物體不動,變換視點的效果

總結
其實兩者本質上是一樣的,gluLookAt()還是隻是計算出了一個變換矩陣


3.全局變換和局部變換

大致先解釋一下:
①全局變換主要是在全局座標系,也叫世界座標系中進行變換,基本是定死的,如下圖的第一行變換就是全局變換,正方形在xyz座標系中,先想(10,0,0)方向平移10,再繞z軸旋轉45°
②局部變換主要是在局部座標系,也叫模型座標系,就是字面意思模型自己的座標,如下圖第二行,第三行變換,當我們以局部座標系對正方形進行先平移,後旋轉的操作時,會發現和全局變換的結果有區別,但是當我們反過來,先旋轉,再平移變換,所達到的結果和全局變換的效果一致
在這裏插入圖片描述
總結:
(1)如果只有一次變換(旋轉、平移。縮放),那麼全局變換和局部變換效果一樣
(2)如果是多個變化的組合,全局變換和局部變換效果不同
(3)局部變換的結果正好相當於組合順序相反的全局變換


看到這,相信很多人都會覺得那爲什麼要有局部變換呢?全部都用全局變換就好了,爲什麼這麼麻煩呢?
個人理解:全局變換適用於整個模型的變換,當我們涉及到模型的部分組件變換的時候,以模型座標系作爲變換的計算更爲便捷。例如:當我們場景中有一個機器人時,機器人整體的行走,跑動等位移,我們可以用全局變換,去看機器人跑動了多遠,但是當機器人跑動的時候,手臂,腳的擺動角度,高度這些,我們如果用全局變換去計算會變得非常麻煩,但是當我們以模型座標系去定位,機器人手腳的位置,這樣的計算就相對來說會變的簡單不少

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