版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1OpenGL 的觀察取景的觀察取景(Viewing and Projections)趙趙 星星首都師范大學(xué)檢測(cè)成像重點(diǎn)實(shí)驗(yàn)室首都師范大學(xué)檢測(cè)成像重點(diǎn)實(shí)驗(yàn)室20142014年年3 3月月2一、取景的基本過(guò)程一、取景的基本過(guò)程31.概述:相機(jī)類比概述:相機(jī)類比(1)模型變換 (modeling),調(diào)整被拍攝物的位置,朝向(2)視點(diǎn)變換 (viewing),調(diào)整視點(diǎn)的位置,朝向(3)投影變換 (projection),調(diào)整鏡頭(放大倍數(shù),取景形狀等)(4)視口變換 (viewport),根據(jù)視口決定照片形狀42. 頂點(diǎn)變換過(guò)程頂點(diǎn)變換過(guò)程 為指定視點(diǎn)變換、模型變換和投影變換,需要建立一個(gè)44的矩陣
2、(M),然后將其與場(chǎng)景中每個(gè)頂點(diǎn)(v)的坐標(biāo)相乘,來(lái)完成變換:v = Mv5視點(diǎn)總是個(gè)視點(diǎn)總是個(gè)4元坐標(biāo)元坐標(biāo)(x,y,z,w),雖然在大多數(shù)情況下,雖然在大多數(shù)情況下,w為為1,且對(duì)于二,且對(duì)于二維頂點(diǎn),維頂點(diǎn),z為為0。除頂點(diǎn)外,這些變換還將自動(dòng)應(yīng)用于法線向量,以確保法線向量和頂點(diǎn)除頂點(diǎn)外,這些變換還將自動(dòng)應(yīng)用于法線向量,以確保法線向量和頂點(diǎn)數(shù)據(jù)之間的關(guān)系保持不變。數(shù)據(jù)之間的關(guān)系保持不變。視點(diǎn)變換和模型變換將被合并,形成模型視點(diǎn)矩陣,并將其應(yīng)用于物體視點(diǎn)變換和模型變換將被合并,形成模型視點(diǎn)矩陣,并將其應(yīng)用于物體坐標(biāo),就得到視點(diǎn)坐標(biāo)坐標(biāo),就得到視點(diǎn)坐標(biāo)(eye coordinate)。投影矩
3、陣將定義的視景體以外的物體裁剪掉,經(jīng)過(guò)投影除法投影矩陣將定義的視景體以外的物體裁剪掉,經(jīng)過(guò)投影除法(perspective division),將坐標(biāo)值除以,將坐標(biāo)值除以w, 生成歸一化的設(shè)備坐標(biāo)。生成歸一化的設(shè)備坐標(biāo)。根據(jù)根據(jù)x坐標(biāo)和坐標(biāo)和y坐標(biāo),足以確定在屏幕上繪制哪些像素;然而,所有變換坐標(biāo),足以確定在屏幕上繪制哪些像素;然而,所有變換都將作用于都將作用于z坐標(biāo)坐標(biāo). 這樣,經(jīng)過(guò)變換后,這樣,經(jīng)過(guò)變換后, z值將準(zhǔn)確地反映頂點(diǎn)的深度值將準(zhǔn)確地反映頂點(diǎn)的深度(離屏幕的距離),深度值的用途之一就是避免不必要的繪制工作。(離屏幕的距離),深度值的用途之一就是避免不必要的繪制工作。6. 通用變換
4、函數(shù)通用變換函數(shù)void glMatrixMode(GLenum mode)調(diào)用變換函數(shù)之前,必須指定需要修改的是模型視點(diǎn)矩陣還是投影調(diào)用變換函數(shù)之前,必須指定需要修改的是模型視點(diǎn)矩陣還是投影矩陣,為此用該函數(shù)選擇要修改的矩陣。矩陣,為此用該函數(shù)選擇要修改的矩陣。指定要修改的矩陣類型,參數(shù)指定要修改的矩陣類型,參數(shù)mode的取值為:的取值為:GL_MODELVIEW、GL_PROJECTION或者或者GL_TEXTURE;指定后,則接下來(lái)的變換;指定后,則接下來(lái)的變換函數(shù)將影響指定的矩陣。函數(shù)將影響指定的矩陣。注意,每次只能修改一種矩陣。默認(rèn)情況下,模型視點(diǎn)矩陣處于被注意,每次只能修改一種矩陣
5、。默認(rèn)情況下,模型視點(diǎn)矩陣處于被修改的狀態(tài),其他三種矩陣都為單位矩陣。修改的狀態(tài),其他三種矩陣都為單位矩陣。7void glLoadIdentity() 將當(dāng)前可被修改的矩陣設(shè)置為一個(gè)將當(dāng)前可被修改的矩陣設(shè)置為一個(gè)4 4的單位矩陣。的單位矩陣。void glLoadMatrixfd(const TYPE *m); 將當(dāng)前矩陣中的將當(dāng)前矩陣中的16個(gè)值設(shè)置為參數(shù)個(gè)值設(shè)置為參數(shù)m指定的值指定的值。void glMultMatrixfd(const TYPE *m); 將將m指定的指定的16元素矩陣乘以當(dāng)前矩陣,并將結(jié)果作為當(dāng)前矩陣元素矩陣乘以當(dāng)前矩陣,并將結(jié)果作為當(dāng)前矩陣。8Figure :先旋轉(zhuǎn)
6、或者先平移先旋轉(zhuǎn)或者先平移 二、模型變換和視點(diǎn)變換二、模型變換和視點(diǎn)變換 先看兩種簡(jiǎn)單的變換:繞先看兩種簡(jiǎn)單的變換:繞z軸逆時(shí)針旋轉(zhuǎn)軸逆時(shí)針旋轉(zhuǎn)45度的和沿度的和沿x軸平移。軸平移。 物體最初位于原點(diǎn)。如果先旋轉(zhuǎn)再平移,變換后的物體將位于物體最初位于原點(diǎn)。如果先旋轉(zhuǎn)再平移,變換后的物體將位于x軸軸上;但如果先沿著上;但如果先沿著x軸平移,再繞軸平移,再繞z軸旋轉(zhuǎn),物體將位于直線軸旋轉(zhuǎn),物體將位于直線y=x上。上。9. 模型變換模型變換移動(dòng)、旋轉(zhuǎn)或縮放來(lái)變換物體(或坐標(biāo)系).1 平移平移void glTranslatefd(TYPEx, TYPE y, TYPEz); 將一個(gè)矩陣與當(dāng)前矩陣相乘,
7、以便將物體(或局部坐標(biāo)系)平移x,y 和z指定的矩陣。10. 旋轉(zhuǎn)旋轉(zhuǎn)void glRotatefd(TYPE Ang, TYPEx, TYPE y, TYPEz); 將一個(gè)矩陣與當(dāng)前矩陣相乘,該矩陣將物體(或局部坐標(biāo)系)繞原點(diǎn)到點(diǎn)(x,y,z)的直線逆時(shí)針旋轉(zhuǎn)angle角度。物體離旋轉(zhuǎn)軸越遠(yuǎn),旋轉(zhuǎn)半徑越大,旋轉(zhuǎn)后移動(dòng)的距離越遠(yuǎn)。11圖:圖:glScalef(2.0, -0.5, 1.0) 的作用的作用. 縮放縮放void glScalefd(TYPEx, TYPE y, TYPEz); 將一個(gè)矩陣與當(dāng)前矩陣相乘,該矩陣將物體縮放或沿著坐標(biāo)軸反射物體。物體上每個(gè)點(diǎn)的坐標(biāo)都乘以參數(shù)x,y和z.1
8、2Figure : 物體和視點(diǎn)都在原點(diǎn)2. 視點(diǎn)變換視點(diǎn)變換改變視點(diǎn)的位置和方向。視點(diǎn)變換通常改變視點(diǎn)的位置和方向。視點(diǎn)變換通常由平移和旋轉(zhuǎn)組成。由平移和旋轉(zhuǎn)組成。模型變換中將物體反時(shí)針旋轉(zhuǎn)時(shí),相當(dāng)模型變換中將物體反時(shí)針旋轉(zhuǎn)時(shí),相當(dāng)于在視點(diǎn)變換中將相機(jī)順時(shí)針旋轉(zhuǎn)。于在視點(diǎn)變換中將相機(jī)順時(shí)針旋轉(zhuǎn)。由于視點(diǎn)默認(rèn)位于原點(diǎn),同時(shí)為了簡(jiǎn)單由于視點(diǎn)默認(rèn)位于原點(diǎn),同時(shí)為了簡(jiǎn)單起見(jiàn),通常在原點(diǎn)處構(gòu)建物體,因此必起見(jiàn),通常在原點(diǎn)處構(gòu)建物體,因此必須進(jìn)行一些變換,以便能夠看到物體。須進(jìn)行一些變換,以便能夠看到物體。13Figure :使視點(diǎn)遠(yuǎn)離物體:使視點(diǎn)遠(yuǎn)離物體最簡(jiǎn)單的方式是:將視最簡(jiǎn)單的方式是:將視點(diǎn)后移,使
9、之遠(yuǎn)離物體;點(diǎn)后移,使之遠(yuǎn)離物體;這相當(dāng)于將物體前移,這相當(dāng)于將物體前移,使之遠(yuǎn)離視點(diǎn)。使之遠(yuǎn)離視點(diǎn)。glTranslatef(0.0, 0.0, -5.0); 將場(chǎng)景中的物體沿將場(chǎng)景中的物體沿z軸負(fù)方向移動(dòng)軸負(fù)方向移動(dòng)5個(gè)單位,個(gè)單位,這相當(dāng)于將相機(jī)沿這相當(dāng)于將相機(jī)沿z軸正軸正方向移動(dòng)方向移動(dòng)5個(gè)單位。個(gè)單位。14三三. 透視變換透視變換1. 透視投影透視投影投影變換旨在定義視景體。投影變換旨在定義視景體。視景體的用途有兩個(gè)視景體的用途有兩個(gè): (1) 決定了物體將被如何投影到屏幕上,決定了物體將被如何投影到屏幕上,即使用透視投影還是正交投影。即使用透視投影還是正交投影。(2) 決定了哪些物
10、體或物體的哪決定了哪些物體或物體的哪些部分將被裁剪掉。些部分將被裁剪掉。調(diào)用投影函數(shù)之前,需要調(diào)用下面兩個(gè)函數(shù):調(diào)用投影函數(shù)之前,需要調(diào)用下面兩個(gè)函數(shù): glMatrixMode(GL_PROJECTION); glLoadIdentity(); 透視投影最顯著的特征是:物體離相機(jī)越遠(yuǎn),在圖像上就顯得透視投影最顯著的特征是:物體離相機(jī)越遠(yuǎn),在圖像上就顯得越小。越小。因?yàn)橥队巴队暗囊暰绑w是一個(gè)棱錐臺(tái);因?yàn)橥队巴队暗囊暰绑w是一個(gè)棱錐臺(tái);這種方法與人眼和相機(jī)的工作原理類似,因此常被用于動(dòng)畫(huà)、這種方法與人眼和相機(jī)的工作原理類似,因此常被用于動(dòng)畫(huà)、視覺(jué)模擬以及試圖實(shí)現(xiàn)真實(shí)感的應(yīng)用程序中。視覺(jué)模擬以及試圖
11、實(shí)現(xiàn)真實(shí)感的應(yīng)用程序中。15glFrustum() 指定的透視視景體void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); 作用:建立一個(gè)用于透視投影的矩陣,并乘以當(dāng)前矩陣。作用:建立一個(gè)用于透視投影的矩陣,并乘以當(dāng)前矩陣。Frustum函數(shù)的視景體由參數(shù):函數(shù)的視景體由參數(shù): (left, bottom, -near) 和和 (right, top, -near) 左左下角和右上角的下角和右上角的(x, y, z) 坐標(biāo);坐標(biāo);near
12、 和和 far 給定視點(diǎn)(給定視點(diǎn)( viewpoint )的近裁剪的近裁剪 (clipping)面和遠(yuǎn)裁剪面和遠(yuǎn)裁剪 (clipping)面面. 應(yīng)該總是為正。應(yīng)該總是為正。16gluPerspective() 指定的透視視景體17正交投影視景體2. 正交投影正交投影18void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); 創(chuàng)建一個(gè)與指定的正交平行視景體對(duì)應(yīng)的矩陣,并將其與當(dāng)前矩陣相乘。(left, bottom, -near)和(rig
13、ht, top, -near)分別是近裁剪面的視區(qū)窗口左下角和右上角點(diǎn):而(left, bottom, -far)和(right, top, -far)分別是遠(yuǎn)裁剪面上視區(qū)窗口左下角和右上角點(diǎn)。1920四四. 視口變換視口變換 視口是窗口中用于繪制圖像的矩形區(qū)域。視口是窗口中用于繪制圖像的矩形區(qū)域。 視口變換相當(dāng)于選擇照片的大?。喝缦M掌珏X包那么大還是視口變換相當(dāng)于選擇照片的大?。喝缦M掌珏X包那么大還是象海報(bào)那么大。象海報(bào)那么大。21 定義視口定義視口缺省情況下,視口為窗口中的整個(gè)像素矩形。要指定更小的繪圖區(qū)缺省情況下,視口為窗口中的整個(gè)像素矩形。要指定更小的繪圖區(qū)域,可以使用函數(shù)域,
14、可以使用函數(shù)glViewport(); void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); 在窗口中指定一個(gè)用于顯示圖像的像素矩形。參數(shù)(x,y)是視口左下角的(在第一象限內(nèi),以(0,0)為原點(diǎn)的)坐標(biāo),而參數(shù)width和height為視口的大小。22例如,可以在通過(guò)劃分窗口來(lái)實(shí)現(xiàn)多畫(huà)面效果,在同一例如,可以在通過(guò)劃分窗口來(lái)實(shí)現(xiàn)多畫(huà)面效果,在同一個(gè)窗口中顯示多個(gè)視圖。個(gè)窗口中顯示多個(gè)視圖。23五、使用三角函數(shù)計(jì)算視野五、使用三角函數(shù)計(jì)算視野 即使相機(jī)的朝向正確,可即使相機(jī)的朝向正確,可以看到物體,物體還是可以看到物體,物體還是可能顯得太大或者太小。能顯得太大或者太小。 如果使用函數(shù)如果使用函數(shù)gluPerpective(),則需要調(diào),則需要調(diào)整其第一個(gè)參數(shù)的值,來(lái)整其第一個(gè)參數(shù)的值,來(lái)改變定義視野的角度。改變定義視野的角度。24六六. 矩陣堆棧操作矩陣堆棧操作矩陣堆棧對(duì)于構(gòu)造層次模型很有用。在層次模型中,復(fù)雜的物體是由簡(jiǎn)單物體組成的。由于變換是以矩陣方式
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川電影電視學(xué)院《表演基礎(chǔ)訓(xùn)練》2021-2022學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《園林樹(shù)木學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《水利工程施工與組織》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《臨床藥物動(dòng)力學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《管理文秘》2023-2024學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《教學(xué)簡(jiǎn)筆畫(huà)》2022-2023學(xué)年第一學(xué)期期末試卷
- 沈陽(yáng)理工大學(xué)《伺服電機(jī)及控制》2022-2023學(xué)年期末試卷
- 沈陽(yáng)理工大學(xué)《面向?qū)ο蟪绦蛟O(shè)計(jì)(Java)》2021-2022學(xué)年期末試卷
- 沈陽(yáng)理工大學(xué)《機(jī)械工程材料及其加工工藝》2021-2022學(xué)年第一學(xué)期期末試卷
- 沈陽(yáng)理工大學(xué)《翻譯批評(píng)與賞析》2022-2023學(xué)年第一學(xué)期期末試卷
- 一年級(jí)拼音默寫(xiě)表
- 26個(gè)英語(yǔ)字母象征意義(課堂PPT)
- 中南大學(xué)湘雅醫(yī)院特色專病門(mén)診和多學(xué)科聯(lián)合門(mén)診管理辦法
- 乒乓球比賽分組對(duì)陣表(8人、16人、32人)
- 消防控制室記錄表
- 小學(xué)三年級(jí)下冊(cè)道德與法治課件-8.大家的朋友-部編版(15張)課件
- 南昌市南京路醫(yī)藥谷工程勘察報(bào)告資料
- TAPP手術(shù)技巧精品課件講座
- 信貸A初級(jí)題庫(kù)(判斷、單選題、多選題)
- 不銹鋼面板吊頂施工工藝(詳細(xì))
- 使用INSITE刷寫(xiě)ECM標(biāo)定操作指導(dǎo)PPT課件
評(píng)論
0/150
提交評(píng)論