計(jì)算機(jī)圖形學(xué)opengl2基本程序結(jié)構(gòu)_第1頁(yè)
計(jì)算機(jī)圖形學(xué)opengl2基本程序結(jié)構(gòu)_第2頁(yè)
計(jì)算機(jī)圖形學(xué)opengl2基本程序結(jié)構(gòu)_第3頁(yè)
計(jì)算機(jī)圖形學(xué)opengl2基本程序結(jié)構(gòu)_第4頁(yè)
計(jì)算機(jī)圖形學(xué)opengl2基本程序結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、計(jì)算機(jī)圖形學(xué)講義OpenGL2 基本程序結(jié)構(gòu)黃可坤嘉應(yīng)學(xué)院 Windows 95/98以及Windows NT 3.51 以上的操作系統(tǒng)中提供了OpenGL的動(dòng)態(tài)庫(kù),在VC+2.0 以上的版本中提供了OpenGL的靜態(tài)庫(kù),所以,使用OpenGL編程,在微機(jī)上使用時(shí),最好是在上述軟件環(huán)境中編寫OpenGL程序。 在微機(jī)版本中,OpenGL 提供了三個(gè)函數(shù)庫(kù),它們是基本庫(kù)、實(shí)用庫(kù)和輔助庫(kù)。 1 Windows系統(tǒng)下的OpenGL函數(shù)OpenGL的基本庫(kù)是OpenGL的核心函數(shù)庫(kù),在這個(gè)函數(shù)庫(kù)中,提供了115個(gè)函數(shù),這些函數(shù)都是以“gl”為前綴。這類API的主要功能包括物體描述、平移、旋轉(zhuǎn)、縮放、光

2、照、紋理、材質(zhì)、像素、位圖、文字處理等。所有OpenGL 提供的操作都可以使用這些函數(shù)來實(shí)現(xiàn),而且,對(duì)于不同的軟件和硬件平臺(tái),這些函數(shù)的使用是完全相同的,這個(gè)特性注定了OpenGL程序完美的可移植性。OpenGL的實(shí)用庫(kù)是OpenGL基本庫(kù)的一套子程序,它提供了43個(gè)函數(shù),這些函數(shù)都是以”glu”為前綴?;镜腛penGL不支持傳統(tǒng)上同圖形標(biāo)準(zhǔn)相關(guān)的一些幾何對(duì)象,為了減少一些編程負(fù)擔(dān),OpenGL提供了實(shí)用庫(kù)。主要功能包括繪制二次曲面、NURBS曲線曲面、復(fù)雜多邊形以及紋理、矩陣管理等。實(shí)用庫(kù)中的所有函數(shù)全都是由OpenGL基本庫(kù)函數(shù)來編寫的,所以,在使用上和OpenGL基本庫(kù)的使用是完全相同

3、的,而且,用戶也可以使用基本函數(shù)庫(kù)來實(shí)現(xiàn)實(shí)用庫(kù)的函數(shù)功能。 OpenGL的輔助庫(kù)是為了方便用戶用標(biāo)準(zhǔn)C編寫OpenGL程序而編寫的。OpenGL是一個(gè)圖形標(biāo)準(zhǔn),所以,在OpenGL中沒有提供窗口管理和消息事件響應(yīng)的函數(shù),這樣使用標(biāo)準(zhǔn)C 編寫OpenGL程序是很不方便的,所以提供了輔助庫(kù)。它提供了31個(gè)函數(shù),這些函數(shù)都是以“aux”為前綴。OpenGL輔助庫(kù)提供了一些基本的窗口管理函數(shù)、事件處理函數(shù)和一些簡(jiǎn)單模型的制作函數(shù)等,例如,定義窗口的大小、處理鍵盤時(shí)間、鼠標(biāo)擊鍵事件、繪制多面體等等。 2 一個(gè)簡(jiǎn)單的OpenGL程序下面將通過一個(gè)簡(jiǎn)單的OpenGL 程序來說明OpenGL頭文件的使用、語(yǔ)法

4、規(guī)則、程序的基本結(jié)構(gòu)、程序的運(yùn)行環(huán)境配置。例10.1 OpenGL 例程 sample.c#include #include #include #include #include void myinit(void);void CALLBACK myReshape(int w, int h);void CALLBACK display(void);void myinit(void) /初始化glClearColor(0.0,0.0,0.0,0.0); /將窗口清為黑色void CALLBACK display(void)glClear(GL_COLOR_BUFFER_BIT); /將顏色緩存清為

5、glClearColor命令所設(shè)置的顏色,即背景色glColor4f(0.2,0.8,1.0,1.0); /選顏色(R,G,B)glRotatef(30,1.0,1.0,0.0); /做旋轉(zhuǎn)變換auxWireCube(1.0); /繪制六面體的虛線圖glFlush(); /強(qiáng)制繪圖,不駐留緩存void CALLBACK myReshape (int w, int h) /用于窗口大小改變時(shí)的處理,與繪圖無(wú)關(guān)glViewport(0,0,w,h); void main(void) auxInitDisplayMode(AUX_SINGLE|AUX_RGBA); /窗口顯示單緩存和RGB(彩色)模

6、式auxInitPosition(0,0,200,200); /大小 x=200 y=200 (0,0)是屏幕左上點(diǎn)auxInitWindow(“openglsample.c”); /初始化窗口,參數(shù)是標(biāo)題myinit();auxReshapeFunc(myReshape);auxMainLoop(display);把以上代碼保存為sample.c,在VC中建立工程并運(yùn)行,會(huì)出錯(cuò)。應(yīng)先配置OpenGL:進(jìn)入Project菜單,選Settings項(xiàng),彈出 Settings 對(duì)話框,選Link項(xiàng),在 Libraries 欄目中加入OpenGL庫(kù):opengl32.lib glu32.lib gla

7、ux.lib或者在代碼里加入以下三句:#pragma comment(lib, opengl32.lib) #pragma comment(lib, glu32.lib)#pragma comment(lib, glaux.lib)2.1 頭文件使用若應(yīng)用程序使用OpenGL核心函數(shù),應(yīng)包括頭文件 ;使用GLU庫(kù)函數(shù),應(yīng)包括頭文件 ;使用AUX庫(kù)函數(shù),應(yīng)包括頭文件 ; 使用WGL和Win32應(yīng)包括頭文件。2. 2 回調(diào)(CALLBACK)函數(shù)CALLBACK函數(shù)是一些用來讓系統(tǒng)調(diào)用的函數(shù),系統(tǒng)調(diào)用它們來實(shí)現(xiàn)顯示、接受輸入事件功能。2.3. 語(yǔ)法規(guī)則OpenGL基本庫(kù)的所有操作函數(shù)都是以“gl”

8、為前綴的。實(shí)用庫(kù)的所有操作函數(shù)都是以“glu”為前綴。輔助庫(kù)的所有操作函數(shù)都是以“aux”為前綴的。OpenGL命令帶有后綴。以sample.c中的glColor4f為例,前綴“gl”指這個(gè)函數(shù)是OpenGL的核心庫(kù)函數(shù),組成命令的單詞首字母大寫,如“Color”;后綴“4”表示顏色值是由4個(gè)變量來表示的;“f ”表示所表示顏色的每個(gè)分量的類型為32位浮點(diǎn)數(shù)。OpenGL核心庫(kù)函數(shù)常量是以“GL_”開頭,均用大寫字母,并用下劃線將每個(gè)關(guān)鍵詞分開,如GL_COLOR_BUFFER_BIT。 2.4. 程序的基本結(jié)構(gòu) 一個(gè)OpenGL程序的基本結(jié)構(gòu)是很簡(jiǎn)單的,無(wú)論多么復(fù)雜的OpenGL程序,可以大

9、致分解成以下部分:(1)定義窗口Windows 系統(tǒng)下的OpenGL實(shí)現(xiàn)提供了一個(gè)輔助函數(shù)庫(kù)aux,用于解決開窗口和處理輸入事件等問題。窗口管理函數(shù):首先,調(diào)用void auxInitDisplayMode(Glbitfield mask) 函數(shù)定義窗口的特性,如顏色和緩存區(qū)的性質(zhì)。例如:auxInitDisplayMode(AUX_SINGLE|AUX_RGBA); /窗口顯示單緩存和RGB(彩色)模式其次,調(diào)用void auxInitPosition(Glint x,Glint y, Glint width, Glint height)定義窗口在屏幕上的位置和大小。其中,x,y為窗口左上角

10、的坐標(biāo),width,height 分別為窗口的寬和高(像素個(gè)數(shù))。默認(rèn)值為(0,0,100,100)。例如:auxInitPosition(0,0,200,200); /大小 x=200 y=200 (0,0)是屏幕左上點(diǎn)最后,完成上述兩個(gè)函數(shù)調(diào)用后,用函數(shù)void auxInitWindow(Glbyte *titleString)打開窗口。窗口的標(biāo)題為字符串titleString。窗口把ESC鍵與退出函數(shù)聯(lián)系起來,可以用來關(guān)閉窗口,退出程序。例如:auxInitWindow(“openglsample.c”); /初始化窗口,參數(shù)是標(biāo)題處理輸入事件:當(dāng)改變窗口尺寸、移動(dòng)窗口、重新顯示窗口時(shí)

11、,由auxReshapeFunc(myReshape)調(diào)用函數(shù)myReshape重新定義窗口屬性。通常myReshape函數(shù)調(diào)用glViewPort函數(shù),對(duì)當(dāng)前圖形進(jìn)行裁剪,重新定義投影矩陣等。OpenGL輔助函數(shù)庫(kù)中還包括處理鍵盤和鼠標(biāo)輸入事件的函數(shù)。(2)初始化操作由于OpenGL的繪圖方式是由一系列的狀態(tài)確定的,因而在繪制圖形前需要做一些準(zhǔn)備工作,包括清緩存區(qū)(buffer)、定義光照模型、定義紋理映射等基本操作的初始化狀態(tài)、設(shè)置三維視景體、定義視口。 例如:glClearColor(0.0,0.0,0.0,0.0); /將窗口清為黑色glClear(GL_COLOR_BUFFER_BI

12、T); /將顏色緩存清為glClearColor命令所設(shè)置的顏色,即背景色(3)設(shè)置觀察坐標(biāo)系下的取景模式主要利用了三個(gè)函數(shù):函數(shù)void glViewport(GLint x, Glint y, Glsizei width, Glsizei height):設(shè)置在屏幕上的視口大小,四個(gè)參數(shù)描述屏幕視口四個(gè)角上的坐標(biāo)(以像素表示)。參數(shù)(x,y)用于指定視口的左下角在窗口坐標(biāo)系中的位置,參數(shù)width和height分別確定矩形視口的寬和高,均以像素為單位 。注意:視口的大小和尺寸是在窗口坐標(biāo)系中進(jìn)行度量的,默認(rèn)狀態(tài)下其坐標(biāo)原點(diǎn)位于窗口的左下角,其尺寸與窗口的大小相同。視點(diǎn)方向觀察體積 函數(shù)vo

13、id glOrtho(left,right,bottom,top,near,far):設(shè)置投影方式為正交投影(平行投影),其取景體積是一個(gè)各面均為矩形的六面體。注: 在默認(rèn)狀態(tài)下投影方式為平行正交投影。函數(shù)void gluPerspective(fovy,aspect,zNear,zFar):設(shè)置投影方式為透視投影,其取景體積是一個(gè)截頭錐體,在這個(gè)體積內(nèi)的物體投影到錐的頂點(diǎn)。它通過指定x-z平面內(nèi)的視角大小及寬高比來確定沿視線方向的棱錐,并通過指定遠(yuǎn)、近剪切面與視點(diǎn)間的距離來截?cái)嗬忮F,得到觀察體。(4)使用OpenGL的庫(kù)函數(shù)構(gòu)造幾何物體對(duì)象的數(shù)學(xué)描述。包括點(diǎn)線面的位置和拓?fù)潢P(guān)系、幾何變換、光照處理等。這是OpenGL程序的主要部分。在例10.1中,在函數(shù)void CALLBACK display(void)中寫好要繪制的三維圖形,然后,在主程序中調(diào)用auxMainLoop(display)就可讓該圖形一直顯示。(5)程序的微機(jī)運(yùn)行環(huán)境配置 軟件與硬件環(huán)境 操作系統(tǒng):Windows 95/98, Windows

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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)論