實(shí)驗(yàn)-OpenGL幾何變換_第1頁(yè)
實(shí)驗(yàn)-OpenGL幾何變換_第2頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余21頁(yè)可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1歡迎下載精品文檔實(shí)驗(yàn) Ope nGL 幾何變換1實(shí)驗(yàn)?zāi)康模豪斫庹莆找粋€(gè) OpenGL 程序平移、旋轉(zhuǎn)、縮放變換的方法。2實(shí)驗(yàn)內(nèi)容:(1)閱讀實(shí)驗(yàn)原理,運(yùn)行示范實(shí)驗(yàn)代碼,掌握 OpenGL 程序平移、旋轉(zhuǎn)、縮放變換的方法;(2) 根據(jù)示范代碼,嘗試完成實(shí)驗(yàn)作業(yè);3.實(shí)驗(yàn)原理:(1) OpenGL 下的幾何變換在 OpenGL 的核心庫(kù)中,每一種幾何變換都有一個(gè)獨(dú)立的函數(shù),所有變換都在三維空間中定義。平移矩陣構(gòu)造函數(shù)為 glTranslate(tx, ty, tz),作用是把當(dāng)前矩陣和一個(gè)表示移動(dòng)物體的矩陣相乘。tx, ty,tz 指定這個(gè)移動(dòng)物體的矩陣,它們可以是任意的實(shí)數(shù)值,后綴為f (單精

2、度浮點(diǎn) float )或 d (雙精度浮點(diǎn) double ),對(duì)于二維應(yīng)用來說,tz=0.0。旋轉(zhuǎn)矩陣構(gòu)造函數(shù)為 glRotate(theta, vx, vy, vz),作用是把當(dāng)前矩陣和一個(gè)表示旋轉(zhuǎn)物體的矩陣相乘。theta, vx, vy, vz 指定這個(gè)旋轉(zhuǎn)物體的矩陣,物體將繞著(0,0,0)到(x,y,z)的直線以逆時(shí)針旋轉(zhuǎn),參數(shù) theta 表示旋轉(zhuǎn)的角度。向量v=(vx, vy ,vz)的分量可以是任意的實(shí)數(shù)值,該向量用于定義通過坐標(biāo)原點(diǎn)的旋轉(zhuǎn)軸的方向,后綴為f(單精度浮點(diǎn) float )或 4(雙精度浮點(diǎn) double ),對(duì)于二維旋轉(zhuǎn)來說,vx=0.0, vy=0.0,vz=1

3、.0??s放矩陣構(gòu)造函數(shù)為 glScale(sx, sy, sz),作用是把當(dāng)前矩陣和一個(gè)表示縮放物體的矩陣相乘。sx,sy,sz 指定這個(gè)縮放物體的矩陣,分別表示在x,y,z 方向上的縮放比例,它們可以是任意的實(shí)數(shù)值,當(dāng)縮放參數(shù)為負(fù)值時(shí),該函數(shù)為反射矩陣,縮放相對(duì)于原點(diǎn)進(jìn)行,后綴為f (單精度浮點(diǎn) float )或 d (雙精度浮點(diǎn) double )。注意這里都是說把當(dāng)前矩陣和一個(gè)表示移動(dòng)物體的矩陣相乘”而不是直接說這個(gè)函數(shù)就是旋轉(zhuǎn)”或者這個(gè)函數(shù)就是移動(dòng)”這是有原因的,馬上就會(huì)講到。2歡迎下載精品文檔假設(shè)當(dāng)前矩陣為單位矩陣,然后先乘以一個(gè)表示旋轉(zhuǎn)的矩陣R,再乘以一個(gè)表示移動(dòng)的矩陣T,最后得到的

4、矩陣再乘上每一個(gè)頂點(diǎn)的坐標(biāo)矩陣v。那么,經(jīng)過變換得到的頂點(diǎn)坐標(biāo)就是(RT)v)。由于矩陣乘法滿足結(jié)合率,(RT)v) = R(Tv),換句話說,實(shí)際上是先進(jìn)行移動(dòng),然后進(jìn)行旋轉(zhuǎn)。即:實(shí)際變換的順序與代碼 中寫的順序是相反的。由于先移動(dòng)后旋轉(zhuǎn)”和 先旋轉(zhuǎn)后移動(dòng)”得到的結(jié)果很可能不同,初學(xué)的時(shí)候需要特別注意這一點(diǎn)。(2)OpenGL 下的各種變換簡(jiǎn)介我們生活在一個(gè)三維的世界一一如果要觀察一個(gè)物體,我們可以:1、從不同的位置去觀察它(人運(yùn)動(dòng),選定某個(gè)位置去看)。(視圖變換)2、移動(dòng)或者旋轉(zhuǎn)它,當(dāng)然了,如果它只是計(jì)算機(jī)里面的物體,我們還可以放大或縮小它(物體運(yùn)動(dòng),讓人 看它的不同部分)。(模型變換)3

5、、 如果把物體畫下來,我們可以選擇:是否需要一種近大遠(yuǎn)小”的透視效果。另外,我們可能只希望看到 物體的一部分,而不是全部(指定看的范圍)。(投影變換)4、我們可能希望把整個(gè)看到的圖形畫下來,但它只占據(jù)紙張的一部分,而不是全部(指定在顯示器窗口的 那個(gè)位置顯示)。(視口變換)這些,都可以在 OpenGL 中實(shí)現(xiàn)。從相對(duì)移動(dòng)”的觀點(diǎn)來看,改變觀察點(diǎn)的位置與方向和改變物體本身的位置與方向具有等效性。在OpenGL中,實(shí)現(xiàn)這兩種功能甚至使用的是同樣的函數(shù)。由于模型和視圖的變換都通過矩陣運(yùn)算來實(shí)現(xiàn),在進(jìn)行變換前,應(yīng)先設(shè)置當(dāng)前操作的矩陣為模型視圖矩陣”設(shè)置的方法是以 GL_MODELVIE 為參數(shù)調(diào)用 g

6、IMatrixMode 函數(shù),像這樣:glMatrixMode(GL_MODELVIEW);該語句指定一個(gè) 4X4 的建模矩陣作為當(dāng)前矩陣。3歡迎下載通常,我們需要在進(jìn)行變換前把當(dāng)前矩陣設(shè)置為單位矩陣。把當(dāng)前矩陣設(shè)置為單位矩陣的函數(shù)為:glLoadldentity();4歡迎下載精品文檔我們?cè)谶M(jìn)行矩陣操作時(shí),有可能需要先保存某個(gè)矩陣,過一段時(shí)間再恢復(fù)它。當(dāng)我們需要保存時(shí),調(diào)用 gIPushMatrix ()函數(shù),它相當(dāng)于把當(dāng)前矩陣壓入堆棧。當(dāng)需要恢復(fù)最近一次的保存時(shí),調(diào)用gIPopMatrix()函數(shù),它相當(dāng)于從堆棧棧頂彈岀一個(gè)矩陣為當(dāng)前矩陣。OpenGL 規(guī)定堆棧的容量至少可以容納32 個(gè)矩

7、陣,某些 OpenGL 實(shí)現(xiàn)中,堆棧的容量實(shí)際上超過了32 個(gè)。因此不必過于擔(dān)心矩陣的容量問題。通常,用這種先保存后恢復(fù)的措施,比先變換再逆變換要更方便,更快速。注意:模型視圖矩陣和投影矩陣都有相應(yīng)的堆棧。使用 glMatrixMode 來指定當(dāng)前操作的究竟是模型視圖矩陣還是投影矩陣。4 示范代碼:、Translate 示例*3nHGinin 一 to.d)宀Qcgrceo(l.plpo0-0Q3陣xMade(GLPROJECnoM-geofthoaD5PW1P-5.P 5rs二嘉MBS闔迦x+5op5.Y/5of5ogsOJmxMade(GLIMODELVIEW)voidddwulQUW貝

8、void) 蠱鷲丑芒壽眇&木兇2嘗出罷QB省naLPOLYGOM) 二 侖 獨(dú) 鄒 觀 曲 蠻 竿 晉ouertexMfz.wofJVASTSIT詈exKJr口呂Lr&0 特rtex2二rMrooy金tr汕9Brtex2FT1.5L-0Q弋評(píng)斤強(qiáng)Q-Endci*iQImyDOJ愛一cvo.d)宀gQe皿S廠85RBUFFERBm二臥冊(cè)gnQoif (looppohdrawsE 里ep二當(dāng)蟹BKM蟲 2g_T 懇 n 器賀丈2*3pps=7卻加粵站亠丁岸囂srr2apr孟*配rla宀dutlniraaapOJrgAg 一匚口n-&5p更Mod辦 nLLT巴NGLE-GLU

9、TRGSeu unprwindosposaDn (Fs“空匚口rlFrw-nCLa壬屮Bopso旦unea rm=ndowTdn5-百resw -hi:sd匸tDbp-iuYFUnc(nrryDsstiig-=Mminuoo口二一卄爲(wèi)潼一8歡迎下載精品文檔注意理解:myDrawl ()和 myDraw2()生成的圖形完全相同,為什么?(2)、Rotate 示例9歡迎下載精品文檔include void init (void)fglClearColor (IO 1.0, L0T0.0);gIMatrixMode (GL_PROJECnON):gluOrtho2D (-5.0, 5,0r-S.0r

10、5.0;設(shè)畫新的極是X:五0“5.(glMatrixMode fGL_MDDELVIEW);v-o*d盹曲4蟲怕(血日)繽制中心在原總邊底為期正方醪glBagm (GL_POL(3Oh0汀煩前綻離按逆0擁方tglVertQx2fg眺曲冊(cè)曲-1町/佑下點(diǎn)glvertex2f (l-0t 1勸);6上點(diǎn)glvertex2f (-l.Ot上點(diǎn)GEnd f );void my Drawl (void)(3lClearGL_COLaR_BUFFER_BIT;glLoadldentityO;肖前回4設(shè)拘單t舞時(shí)glColor3f (1A OA 0.0);draWqwg()M在原點(diǎn)處繪制邊忙為2紅色正方形j

11、Tran*航商(24心,6。4);向右務(wù)動(dòng)2單位,向上移動(dòng)3單位glRotatef(30.0rO.Ofl-t);度glColorSf (C.0, 10 0.0);dna能qureO;縊0邊対觀色方時(shí)glLoadldentityO; /鵬當(dāng)前拒晦殳為單位矩時(shí)glTranslateft-Z.0,-3.0.0);/fft左移動(dòng)弾向下移動(dòng)d單位glRctatef(-3QrO*0;0-Ofl-C);30ftJSglColor3f (0.0f0.0f1.0);砒於繪制站為2籃色正方形glRush ();*3nHuoQITYomvv2 s宀eft里GLICQL0FtBUFFERB3二需冊(cè)空d5豊g二矗血幕幕

12、程曰豊lQ-CGo3f (lp0-n obbdi住蘭匚蘭喪)二、蠱會(huì)淞査脣木兇 MISJERZQ_Tran5一mrefQpwoos】/劉詰2is呼耳囂sisB Q_RO陣e=歲ooeole二二轡啤聲豈珈風(fēng)Q_CQ_o3fpplpPOMd星蘭匚當(dāng)sw聖象/一域留耳 Z呂dn許區(qū)EQ&CCS二建對(duì)瞽戦9頁(yè)OJffvEOocFls二倉(cāng)口宰需壽3珮麗Q_CQol3f(pw op1OMQ-Fcsh ()丈oid 3土n宀亍frOJapchOJ7-OJas宀Q-urmil-r會(huì)00DJrwj gFHmsspiry玉&N(GLLrrulIMGLE-GLUTRGAHdunnir-rs.ndow

13、poski&nor ORglutlnFrwiaowsi倍Boor600)7gcnreamwndcsw(TROErffyl曲3imgg-utD-sp-ayfunn(FnyDdEljiA匸 tMainLoop(】;卄爲(wèi)潼一精品文檔注意理解:myDrawl ()和 myDraw2()生成的圖形完全相同,為什么?、Scale 示例施snMjK卜ndlls-/hGL/gcr-hv茁b?5o7SU10W502盞5XMQ&-Q廠MODELSEWMvo.dmyDdwl(uon.c_cm二GU_COLORIBUFFERIB3痂冊(cè)dco_or3fPFpsPS+ddwsqu 豊 eQ:二時(shí)譽(yù)能蚤&a

14、mp;曲兇昌回mBZ gHra詰_陳碼(FJbLJbcb);0畐礙呂2_khy洋醬bw囲磊龜slplylls二交$型和站渤魯蓉詐弼弟一kDtlonaoLJfGorIOpsi牙常 0;、 、 辱一梁涉豔 S05 滾PTans-aJffTNJQ&.poo)二注怖醫(yī)tzr2Kry可副蓉LJ惟汗呂盅國(guó)占.5.?社二Ni訃-裁;r坯歳些壽魯卩 5乎g-co03fsp0-0-rsiaSMMea 二瞿柴旨hj觀時(shí)廿然anuftC+*3nHY2.CLnnyDra筑 2聲昭gHrin*藥笳fpJ3o?sjA哥議嚳hjs已耳喩垃4日旦scal離L91.W1.S二/X苕7粗蘋副耳住同墨一ulii g-coo

15、3F3.IQp0=牙呈 SQU 侖 0 二、曹柴甘筑時(shí)出想Q_Tmnsfirtm?2Q:3osiMsjprtiJ2B殳&2洽誼?1510)二訂卻亠曙劑總曙壽養(yǎng)95砂聲峯甘劇陪一-諾9CQ.23二 OQQQ1OXCLrws MQIrDo二、馨嗦皆聶田9-F1USI1(Na3宀Qc口nrt(gladQfijgUQa工二吞總宀alcffiarcdorrploF lppsjGLPKQECTTQMgcorthQ2DTwo 5b59 0si二站礎(chǔ)常3鈕迦xT5b2 5Y75e2 5bQzolgxMod龍(G 廠MGDELWEW);gid 飮丟習(xí)亡豈00.二矗査丑 b 審眇學(xué)筆篇蟲 Z宀gra趕5a

16、LPPYGOs二/濁那寤苯唇蘋雪精品文檔20欠迎下載void nrtyDaw (vo d)glClear tGL_COLOBUFFER_BIT);/備空gllxadldentityQ;當(dāng)前矩陣設(shè)為單f堆陣alPush聞日皿0;glTranslateff 0 QfZ Df,(LOf);glScalef(3.Or0,5rl,O);glCo arjf (1.0, 00 Q.0);drBivSqjreC);上面紅色矩砒gIPopMatrixO;glPushMatrixO;glTran&lateff-3.0,0,0,0.01;glPushMatrixQ;glRjotatef(45.OfD,OrO

17、.arl-O);qlCo w3f (0.0, l.O, O.OJ;drawSqjareO;中間童舵IPopMatriwO:glTrans.latef3.0H0.0H0.0);gl PushMatrixQ;glRjotatef(45.Of0.0,0.0,1-0);glCo ar2r (0.0r0.7, 0.0);drawSquaref);中間申菱形glPoMatrixf);gUranslateft 3.0,0,0,0.0);glPyshMatnx()j精品文檔21欠迎下載gl RjCtatef 45.(Jr0. OjO .0,1.0);glColor3f (0.0, 0.4, 0.0);draw

18、SquareO; /仲間右羞序glPopMatnx();glPopHatrix();glTranslateffO.O.-S.O.O);glScale.OJ.S,!.!);glColor3f (0.0, O.Of1*0);dr3wSquare(;”両齟矩形glFlush ();void main (int angc, char*1 angvgluOnit$血);OlutlnitDiSDlayMoclE (GLUT.SJNGLE |GLUT_KGB);glutlnitWirdoV-JPOSItion (0, 0);glutlnimirdov/5ize (&0Q &00);glurcreateWindow(”幾何殳換函隸綜合示例”);glutDisplayFunc (myDraw);glutM a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論