實驗 OpenGL幾何變換_第1頁
實驗 OpenGL幾何變換_第2頁
實驗 OpenGL幾何變換_第3頁
實驗 OpenGL幾何變換_第4頁
實驗 OpenGL幾何變換_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

3、一個表示縮放物體的矩陣相乘。sx, sy,sz指定這個縮放物體的矩陣,分別表示在x,y,z方向上的縮放比例,它們可以是任意的實數(shù)值,當(dāng)縮放參數(shù)為負值時,該函數(shù)為反射矩陣,縮放相對于原點進行,后綴為f(單精度浮點float)或d(雙精度浮點double)。注意這里都是說“把當(dāng)前矩陣和一個表示移動物體的矩陣相乘”,而不是直接說“這個函數(shù)就是旋轉(zhuǎn)”或者“這個函數(shù)就是移動”,這是有原因的,馬上就會講到。假設(shè)當(dāng)前矩陣為單位矩陣,然后先乘以一個表示旋轉(zhuǎn)的矩陣R,再乘以一個表示移動的矩陣T,最后得到的矩陣再乘上每一個頂點的坐標矩陣v。那么,經(jīng)過變換得到的頂點坐標就是(RT)v)。由于矩陣乘法滿足結(jié)合率,(R

4、T)v) = R(Tv),換句話說,實際上是先進行移動,然后進行旋轉(zhuǎn)。即:實際變換的順序與代碼中寫的順序是相反的。由于“先移動后旋轉(zhuǎn)”和“先旋轉(zhuǎn)后移動”得到的結(jié)果很可能不同,初學(xué)的時候需要特別注意這一點。(2)OpenGL下的各種變換簡介我們生活在一個三維的世界如果要觀察一個物體,我們可以:1、從不同的位置去觀察它(人運動,選定某個位置去看)。(視圖變換)2、移動或者旋轉(zhuǎn)它,當(dāng)然了,如果它只是計算機里面的物體,我們還可以放大或縮小它(物體運動,讓人看它的不同部分)。(模型變換)3、如果把物體畫下來,我們可以選擇:是否需要一種“近大遠小”的透視效果。另外,我們可能只希望看到物體的一部分,而不是全

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

6、當(dāng)前矩陣。通常,我們需要在進行變換前把當(dāng)前矩陣設(shè)置為單位矩陣。把當(dāng)前矩陣設(shè)置為單位矩陣的函數(shù)為:glLoadIdentity();我們在進行矩陣操作時,有可能需要先保存某個矩陣,過一段時間再恢復(fù)它。當(dāng)我們需要保存時,調(diào)用glPushMatrix()函數(shù),它相當(dāng)于把當(dāng)前矩陣壓入堆棧。當(dāng)需要恢復(fù)最近一次的保存時,調(diào)用glPopMatrix()函數(shù),它相當(dāng)于從堆棧棧頂彈出一個矩陣為當(dāng)前矩陣。OpenGL規(guī)定堆棧的容量至少可以容納32個矩陣,某些OpenGL實現(xiàn)中,堆棧的容量實際上超過了32個。因此不必過于擔(dān)心矩陣的容量問題。通常,用這種先保存后恢復(fù)的措施,比先變換再逆變換要更方便,更快速。注意:模型視圖矩陣和投影矩陣都有相應(yīng)的堆棧。使用glMatrixMode來指定當(dāng)前操作的究竟是模型視圖矩陣還是投影矩陣。4示范代碼:(1)、Translate示例生成圖形:注意理解:myDraw1()和myDraw2()生成的圖形完全相同,為什么?(2)、Rotate示例生成圖形:注意理解:myDraw1()和myDraw2()生成的圖形完全相同,為什么?(3)、Sc

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論