[OpenGL]OpenGL几何变换的秘密(模型变换、视点变换、全局变换、局部变换)
1.模型變換(Model transformation)---- 視點(diǎn)不變,變物體
我們?cè)贠penGL中通過(guò)定義一組頂點(diǎn)來(lái)定義一個(gè)模型,我們遇到的平移、縮放、旋轉(zhuǎn)等變換都可以理解為模型變換,視點(diǎn)不變,主要對(duì)物體進(jìn)行操作。在OpenGL中,我們使用glMatrixMode(GL_MODELVIEW)來(lái)處理模型變換,我們知道OpenGL使用堆棧管理矩陣,所以我們有不同的堆棧進(jìn)行管理,有模型變換矩陣堆棧,視點(diǎn)變換矩陣堆棧,還有紋理變換矩陣堆棧等等,這句話就是告訴OpenGL,我們要處理模型變換。
2.視點(diǎn)變換(View transformation)---- 物體不變,變視點(diǎn)
OpenGL成像主要是采用虛擬相機(jī)模型,在場(chǎng)景中我們通過(guò)模型變換,將物體放在場(chǎng)景中不同的位置,最終哪些部分需要顯示在屏幕上,主要是由視點(diǎn)變換、投影變換等決定。視點(diǎn)變換階段,我們通過(guò)假想的相機(jī)來(lái)處理矩陣計(jì)算。,所謂的視點(diǎn)空間,視點(diǎn)坐標(biāo)系都是為了方便處理,引入的坐標(biāo)空間。
在OpenGL中,我們主要使用
來(lái)達(dá)到模擬物體不動(dòng),變換視點(diǎn)的效果
總結(jié)
其實(shí)兩者本質(zhì)上是一樣的,gluLookAt()還是只是計(jì)算出了一個(gè)變換矩陣
3.全局變換和局部變換
大致先解釋一下:
①全局變換主要是在全局坐標(biāo)系,也叫世界坐標(biāo)系中進(jìn)行變換,基本是定死的,如下圖的第一行變換就是全局變換,正方形在xyz坐標(biāo)系中,先想(10,0,0)方向平移10,再繞z軸旋轉(zhuǎn)45°
②局部變換主要是在局部坐標(biāo)系,也叫模型坐標(biāo)系,就是字面意思模型自己的坐標(biāo),如下圖第二行,第三行變換,當(dāng)我們以局部坐標(biāo)系對(duì)正方形進(jìn)行先平移,后旋轉(zhuǎn)的操作時(shí),會(huì)發(fā)現(xiàn)和全局變換的結(jié)果有區(qū)別,但是當(dāng)我們反過(guò)來(lái),先旋轉(zhuǎn),再平移變換,所達(dá)到的結(jié)果和全局變換的效果一致
總結(jié):
(1)如果只有一次變換(旋轉(zhuǎn)、平移。縮放),那么全局變換和局部變換效果一樣
(2)如果是多個(gè)變化的組合,全局變換和局部變換效果不同
(3)局部變換的結(jié)果正好相當(dāng)于組合順序相反的全局變換
看到這,相信很多人都會(huì)覺(jué)得那為什么要有局部變換呢?全部都用全局變換就好了,為什么這么麻煩呢?
個(gè)人理解:全局變換適用于整個(gè)模型的變換,當(dāng)我們涉及到模型的部分組件變換的時(shí)候,以模型坐標(biāo)系作為變換的計(jì)算更為便捷。例如:當(dāng)我們場(chǎng)景中有一個(gè)機(jī)器人時(shí),機(jī)器人整體的行走,跑動(dòng)等位移,我們可以用全局變換,去看機(jī)器人跑動(dòng)了多遠(yuǎn),但是當(dāng)機(jī)器人跑動(dòng)的時(shí)候,手臂,腳的擺動(dòng)角度,高度這些,我們?nèi)绻萌肿儞Q去計(jì)算會(huì)變得非常麻煩,但是當(dāng)我們以模型坐標(biāo)系去定位,機(jī)器人手腳的位置,這樣的計(jì)算就相對(duì)來(lái)說(shuō)會(huì)變的簡(jiǎn)單不少
總結(jié)
以上是生活随笔為你收集整理的[OpenGL]OpenGL几何变换的秘密(模型变换、视点变换、全局变换、局部变换)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: FL Studio 中的 Fruity
- 下一篇: 注册登录显示个人中心