



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、OpenGL圖形變換OpenGL圖形軟件包是為三維應(yīng)用設(shè)計的,其中包含了大量的有關(guān)三維變換的操作,二維變換則可以看作是三維變換的特例。OpenGL中常用的變換包括模型視圖變換、投影變換和視見區(qū)變換。一、矩陣堆棧在計算機(jī)圖形學(xué)中,所有的變換都是通過矩陣乘法來實現(xiàn)的,即將三維形體頂點構(gòu)成的齊次坐標(biāo)矩陣乘以三維變換矩陣就得到了變換后的形體頂點的齊次坐標(biāo)矩陣,這樣只要求出形體的三維變換矩陣,就可以得到變換后的形體。在OpenGL中,對象的坐標(biāo)變換也是通過矩陣來實現(xiàn)的。OpenGL中包含了兩個重要的矩陣:模型視圖矩陣和投影矩陣,其中模型視圖矩陣用于物體的模型視圖變換,投影矩陣用于投影變換。 &
2、#160; 一般來說,在進(jìn)行矩陣操作之前,需要指定當(dāng)前操作的矩陣對象,這可以使用函數(shù): glMatrixMode(GLenum mode);定義。其中當(dāng)mode取GL_MODELVIEW時,表示對模型視圖矩陣進(jìn)行操作;當(dāng)mode取GL_PROJECTION時表示對投影矩陣進(jìn)行操作,并且一旦設(shè)置了當(dāng)前操作矩陣,它就將保持為當(dāng)前的矩陣對象,直到再次調(diào)用函數(shù)glMatrixMode修改它為止。默認(rèn)情況下,系統(tǒng)處理的當(dāng)前矩陣是模型視圖矩陣。 OpenGL為模型視圖矩陣和投影矩陣各維護(hù)著
3、一個“矩陣堆棧”,其中堆棧的棧頂矩陣就是當(dāng)前的模型視圖矩陣或投影矩陣。在調(diào)用變換函數(shù)的時候,系統(tǒng)自動計算變換函數(shù)對應(yīng)的變換矩陣與當(dāng)前操作的矩陣堆棧棧頂矩陣的乘積,并置為棧頂矩陣,繪制圖形時使用棧頂矩陣作為圖形的變換矩陣。矩陣堆棧主要用來保存和恢復(fù)矩陣的狀態(tài)。OpenGL中利用函數(shù): void glPushMatrix(void); void glPopMatrix(void); 實現(xiàn)矩陣堆棧的操作。其中函數(shù)glPushMatri
4、x將當(dāng)前矩陣堆棧的棧頂矩陣復(fù)制一個,并將其壓入當(dāng)前矩陣堆棧,以保存當(dāng)前變換矩陣。函數(shù)glPopMatrix用于將當(dāng)前矩陣堆棧的棧頂矩陣彈出,這樣,堆棧中的下一個矩陣變?yōu)闂m斁仃嚕ó?dāng)前變換矩陣),用來恢復(fù)當(dāng)前變換矩陣原先的狀態(tài)。二、模型視圖變換模型視圖矩陣是一個4×4的矩陣,用于指定場景的視圖變換和幾何變換。在進(jìn)行模型視圖矩陣操作前,必須調(diào)用函數(shù)glMatrixMode(GL_MODELVIEW)指定變換只能影響模型視圖矩陣。模型變換主要確定模型在坐標(biāo)系中的位置,主要通過平移、旋轉(zhuǎn)和放縮等幾何變換改變模型的位置、尺寸和形狀。模型變換的實現(xiàn)主要有以下兩種方法。1. 直接定義矩陣
5、; OpenGL利用函數(shù): void glLoadMatrixfd(const TYPE *m);將m所指定的矩陣置為當(dāng)前矩陣堆棧的棧頂矩陣。其中,m是一個以列優(yōu)先順序保存的16個值組成的4×4矩陣的指針。此外,還可以使用函數(shù): void glMultiMatrixfd(const TYPE *m);將模型視圖矩陣與m指定矩陣的乘積置為當(dāng)前的模型視圖矩陣。其中參數(shù)m為一個以列優(yōu)先順序保存16個連續(xù)值的數(shù)組指針。2. 利用高級矩陣函數(shù)
6、 在OpenGL中,還可以通過一些高級矩陣函數(shù)將模型視圖矩陣乘以指定的變換矩陣,并將結(jié)果矩陣設(shè)置成當(dāng)前的模型視圖矩陣。常用的高級矩陣函數(shù)包括平移 、旋轉(zhuǎn)、和縮放矩陣函數(shù)。 (1)平移矩陣函數(shù): void glTranslatedf(TYPE x,TYPE y,TYPE z);用當(dāng)前矩陣乘以平移矩陣,參數(shù)x,y,z分別是沿三個軸的正向平移的平移矢量。 (2)旋轉(zhuǎn)矩陣函數(shù): void glRotatedf(TYP
7、E angle,TYPE x,TYPE y,TYPE z );用當(dāng)前矩陣乘以旋轉(zhuǎn)矩陣。其中,參數(shù)angle表示繞方向矢量逆時針旋轉(zhuǎn)的角度,參數(shù)x,y,z則指定旋轉(zhuǎn)軸為由原點到(x,y,z)指定的方向矢量。 (3)縮放矩陣函數(shù): void glScaledf(TYPE x,TYPE y,TYPE z);用當(dāng)前矩陣乘以縮放矩陣,其中不為零的參數(shù)x,y,z分別表示三個坐標(biāo)軸方向的比例因子。注意,當(dāng)其中某個參數(shù)為負(fù)值時,可以表示對模型進(jìn)行相應(yīng)軸的對稱變換。在調(diào)用函數(shù)時,修改的是當(dāng)前的模型視圖矩陣。新的矩陣隨后
8、將成為當(dāng)前的模型視圖矩陣并影響此后繪制的圖形。這樣模型視圖矩陣函數(shù)在調(diào)用時,就會有造成效果的積累。如果不需要這樣的積累可以調(diào)用重置矩陣函數(shù): void glLoadIdentity(void);該函數(shù)將單位矩陣置為當(dāng)前變換矩陣。一般在指定當(dāng)前操作矩陣對象后,都要調(diào)用重置矩陣函數(shù),將以前變換的影響消除,避免出現(xiàn)意想不到的情況。視圖變換主要用于確定觀察參考坐標(biāo)系,即確定視點的位置和觀察方向。默認(rèn)情況下,觀察坐標(biāo)系與用戶坐標(biāo)系重合,此時視點位于原點,觀察方向為用戶坐標(biāo)系z軸的負(fù)向。當(dāng)然,也可以調(diào)用函數(shù): &
9、#160; void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble centerz,GLdouble upx,GLdouble upy,GLdouble upz); 實現(xiàn)觀察坐標(biāo)系的定義。其中,P0(eyex,eyey,eyez)定義觀察坐標(biāo)系原點在用戶坐標(biāo)系下的坐標(biāo);Pref(centerx,centery,centerz)定義一個視線上的點,矢量P0Pref定義了觀察坐標(biāo)系的法矢量N;參數(shù)
10、upx,upy,upz指定觀察正向矢量V。系統(tǒng)利用矢量N和V計算出矢量U,構(gòu)造觀察坐標(biāo)系。 這里需要說明的是,OpenGL采用的規(guī)范化齊次坐標(biāo)矩陣是列向量的方式,使得進(jìn)行基本幾何變換的方式與前面介紹的內(nèi)容稍有不同,在處理復(fù)合變換時,應(yīng)該按照模型進(jìn)行變換的逆順序指定變換,即最先對模型實施的變換最后指定。三、投影變換 OpenGL中只提供了兩種投影方式,一種是正投影,另一種是透視投影。不管是調(diào)用哪種投影函數(shù),為了避免不必要的變換,必須調(diào)用glMAtrixMode(GL_PROJECTION)指定當(dāng)前處理的矩陣是投影變換矩陣。1. 正投影 正投
11、影,又叫正平行投影,它的有限觀察空間是一個矩形的平行管道,也就是一個長方體,其特點是無論物體距離相機(jī)多遠(yuǎn),投影后的物體大小尺寸不變。OpenGL中正投影函數(shù)共有兩個。一個函數(shù)是: void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far); 這個函數(shù)的操作是創(chuàng)建一個正投影的有限觀察空間。其中近裁剪平面是一個矩形,矩形左下角點三維空間坐標(biāo)是(left,bottom,-near),右上角點是(right,top,-near);遠(yuǎn)裁剪平面也是一個矩形,左
12、下角點空間坐標(biāo)是(left,bottom,-far),右上角點是(right,top,-far)。所有的near和far值同時為正或同時為負(fù)。如果沒有其他變換,正投影的方向平行于z軸,且視點朝向z負(fù)軸。這意味著物體在視點前面時far和near都為負(fù)值,物體在視點后面時far和near都為正值。 另一個函數(shù)是: void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top); 它是一個特殊的正投影函數(shù),主要用于二維圖像到二維屏幕上
13、的投影。它的near和far缺省值分別為-1.0和1.0,所有二維物體的z坐標(biāo)都為0.0。因此它的裁剪面是一個左下角點為(left,bottom)、右上角點為(right,top)的矩形。2. 透視投影 透視投影的特點是距離視點近的物體大,距離視點遠(yuǎn)的物體小,遠(yuǎn)到極點即為消失。它的觀察空間是一個頂部和底部都被切除掉的棱椎,也就是棱臺。OpenGL透視投影函數(shù)也有兩個,其中一個函數(shù)是: void glFrustum(GLdouble left,GLdouble Right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far); 此函數(shù)創(chuàng)建一個透視投影的有限觀察空間。它的參數(shù)只定義近裁剪平面的左下角點和右上角點的三維空間坐標(biāo),即(left,bottom,-near)和(right,top,-near);最后一個參數(shù)far是遠(yuǎn)裁剪平面的Z負(fù)值,其左下角點和右上角點空間坐標(biāo)由函數(shù)根據(jù)透視投影原理自動生成。near和far表示離視點的遠(yuǎn)近,它們總為正值。 另一個函數(shù)是: void gluPerspective(GLdouble
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年心理健康教育與咨詢專業(yè)知識考試試題及答案
- 2025年刑法學(xué)考試試題及答案分析
- 2025年物理學(xué)專業(yè)研究生入學(xué)考試題及答案
- 2025年數(shù)據(jù)分析師考試模擬題及答案
- 2025年社區(qū)服務(wù)管理師考試試卷及答案
- 2025年軟件工程專業(yè)考試題及答案
- 2025年會計電算化考試真題及答案
- 2025年健康管理與健康教育課程考試試題及答案
- 2025年古典文學(xué)專業(yè)研究生入學(xué)考試試卷及答案
- 2025年高中數(shù)學(xué)模擬考試試題及答案
- 2024中華人民共和國學(xué)前教育法詳細(xì)解讀課件
- 湖北省武漢市2024年中考數(shù)學(xué)試卷(含答案)
- 代理銷售居間服務(wù)協(xié)議版
- 新課標(biāo)對學(xué)習(xí)評價目標(biāo)與路徑的構(gòu)建讀后感
- 江蘇省南通市海門市2023-2024學(xué)年六年級下學(xué)期期末英語試卷
- 重度哮喘診斷與處理中國專家共識(2024版)解讀
- 第十九章-香港澳門法制(《中國法制史》課件)
- 國家開放大學(xué)本科《公共政策概論》期末紙考試總題庫
- 煤矸石綜合利用工程項目可行性研究報告
- 公司會議管理制度及流程
- 《創(chuàng)傷失血性休克中國急診專家共識(2023)》解讀課件
評論
0/150
提交評論