OpenGL庫函數(shù)大全_第1頁
OpenGL庫函數(shù)大全_第2頁
OpenGL庫函數(shù)大全_第3頁
OpenGL庫函數(shù)大全_第4頁
OpenGL庫函數(shù)大全_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1.OpenGL核心庫核心庫包含有115個函數(shù),函數(shù)名的前綴為gl。這部分函數(shù)用于常規(guī)的、核心的圖形處理。此函數(shù)由gl.dll來負(fù)責(zé)解釋執(zhí)行。由于許多函數(shù)可以接收不同數(shù)以下幾類。據(jù)類型的參數(shù),因此派生出來的函數(shù)原形多達(dá)300多個。核心庫中的函數(shù)主要可以分為以下幾類函數(shù):(1繪制基本幾何圖元的函數(shù)。如繪制圖元的函數(shù)glBegain(、glEnd(、glNormal*(、glV ertex*(。(2矩陣操作、幾何變換和投影變換的函數(shù)。如矩陣入棧函數(shù)glPushMatrix(、矩陣出棧函數(shù)glPopMatrix(、裝載矩陣函數(shù)glLoadMatrix(、矩陣相乘函數(shù)glMultMatrix(,當(dāng)前矩

2、陣函數(shù)glMatrixMode(和矩陣標(biāo)準(zhǔn)化函數(shù)glLoadIdentity(,幾何變換函數(shù)glTranslate*(、glRotate*(和glScale*(,投影變換函數(shù)glOrtho(、glFrustum(和視口變換函數(shù)glViewport(等等。(3顏色、光照和材質(zhì)的函數(shù)。如設(shè)置顏色模式函數(shù)glColor*(、glIndex*(,設(shè)置光照效果的函數(shù)glLight*( 、glLightModel*(和設(shè)置材質(zhì)效果函數(shù)glMaterial(等等。(4顯示列表函數(shù)、主要有創(chuàng)建、結(jié)束、生成、刪除和調(diào)用顯示列表的函數(shù)glNewList(、glEndList(、glGenLists(、glCall

3、List(和glDeleteLists(。(5紋理映射函數(shù),主要有一維紋理函數(shù)glTexImage1D(、二維紋理函數(shù)glTexImage2D(、設(shè)置紋理參數(shù)、紋理環(huán)境和紋理坐標(biāo)的函數(shù)glTexParameter*(、glTexEnv*(和glTetCoord*(等。(6特殊效果函數(shù)。融合函數(shù)glBlendFunc(、反走樣函數(shù)glHint(和霧化效果glFog*(。(7光柵化、象素操作函數(shù)。如象素位置glRasterPos*(、線型寬度glLineWidth(、多邊形繪制模式glPolygonMode(,讀取象素glReadPixel(、復(fù)制象素glCopyPixel(等。(8選擇與反饋函數(shù)

4、。主要有渲染模式glRenderMode(、選擇緩沖區(qū)glSelectBuffer(和反饋緩沖區(qū)glFeedbackBuffer(等。(9曲線與曲面的繪制函數(shù)。生成曲線或曲面的函數(shù)glMap*(、glMapGrid*(,求值器的函數(shù)glEvalCoord*( glEvalMesh*(。(10狀態(tài)設(shè)置與查詢函數(shù)。主要有g(shù)lGet*(、glEnable(、glGetError(等。2.OpenGL實用庫The OpenGL Utility Library (GLU包含有43個函數(shù),函數(shù)名的前綴為glu。OpenGL提供了強(qiáng)大的但是為數(shù)不多的繪圖命令,所有較復(fù)雜的繪圖都必須從點。線、面開始。Glu

5、為了減輕繁重的編程工作,封裝了OpenGL函數(shù),Glu函數(shù)通過調(diào)用核心庫的函數(shù),為開發(fā)者提供相對簡單的用法,實現(xiàn)一些較為復(fù)雜的操作。此函數(shù)由glu.dll來負(fù)責(zé)解釋執(zhí)行。OpenGL中的核心庫和實用庫可以在所有的OpenGL平臺上運行。主要包括了以下幾種:(1輔助紋理貼圖函數(shù),有g(shù)luScaleImage( 、gluBuild1Dmipmaps(、gluBuild2Dmipmaps(。(2坐標(biāo)轉(zhuǎn)換和投影變換函數(shù),定義投影方式函數(shù)gluPerspective(、gluOrtho2D( 、gluLookAt(,拾取投影視景體函數(shù)gluPickMatrix(,投影矩陣計算gluProject(和gl

6、uUnProject(等等。(3多邊形鑲嵌工具,有g(shù)luNewTess(、gluDeleteTess(、gluTessCallback(、gluBeginPolygon( gluTessV ertex(、gluNextContour(、gluEndPolygon(等等。(4二次曲面繪制工具,主要有繪制球面、錐面、柱面、圓環(huán)面gluNewQuadric(、gluSphere(、gluCylinder(、gluDisk(、gluPartialDisk(、gluDeleteQuadric(等等。(5非均勻有理B樣條繪制工具,主要用來定義和繪制Nurbs曲線和曲面,包括gluNewNurbsRende

7、rer(、gluNurbsCurve(、gluBeginSurface(、gluEndSurface(、gluBeginCurve(、gluNurbsProperty(等函數(shù)。(6錯誤反饋工具,獲取出錯信息的字符串gluErrorString(。3.OpenGL輔助庫包含有31個函數(shù),函數(shù)名前綴為aux。這部分函數(shù)提供窗口管理、輸入輸出處理以及繪制一些簡單三維物體。此函數(shù)由glaux.dll來負(fù)責(zé)解釋執(zhí)行。創(chuàng)建aux庫是為了學(xué)習(xí)和編寫OpenGL程序,它更像是一個用于測試創(chuàng)意的預(yù)備基礎(chǔ)接管。Aux庫在windows實現(xiàn)有很多錯誤,因此很容易導(dǎo)致頻繁的崩潰。在跨平臺的編程實例和演示中,aux很大

8、程度上已經(jīng)被glut庫取代。OpenGL中的輔助庫不能在所有的OpenGL平臺上運行。輔助庫函數(shù)主要包括以下幾類:(1窗口初始化和退出函數(shù),auxInitDisplayMode(和auxInitPosition(。(2窗口處理和時間輸入函數(shù),auxReshapeFunc(、auxKeyFunc(和auxMouseFunc(。(3顏色索引裝入函數(shù),auxSetOneColor(。(4三維物體繪制函數(shù)。包括了兩種形式網(wǎng)狀體和實心體,如繪制立方體auxWireCube(和auxSolidCube(。這里以網(wǎng)狀體為例,長方體auxWireBox(、環(huán)形圓紋面auxWireTorus(、圓柱auxWir

9、eCylinder(、二十面體auxWireIcosahedron(、八面體auxWireOctahedron(、四面體auxWireTetrahedron(、十二面體auxWireDodecahedron(、圓錐體auxWireCone(和茶壺auxWireTeapot(。(5背景過程管理函數(shù)auxIdleFunc(。(6程序運行函數(shù)auxMainLoop(。4.OpenGL工具庫OpenGL Utility Toolkit包含大約30多個函數(shù),函數(shù)名前綴為glut。glut是不依賴于窗口平臺的OpenGL工具包,由Mark KLilgrad在SGI編寫(現(xiàn)在在Nvidia,目的是隱藏不同窗

10、口平臺API的復(fù)雜度。函數(shù)以glut開頭,它們作為aux庫功能更強(qiáng)的替代品,提供更為復(fù)雜的繪制功能,此函數(shù)由glut.dll來負(fù)責(zé)解釋執(zhí)行。由于glut中的窗口管理函數(shù)是不依賴于運行環(huán)境的,因此OpenGL中的工具庫可以在X-Window, Windows NT, OS/2等系統(tǒng)下運行,特別適合于開發(fā)不需要復(fù)雜界面的OpenGL示例程序。對于有經(jīng)驗的程序員來說,一般先用glut理順3D圖形代碼,然后再集成為完整的應(yīng)用程序。這部分函數(shù)主要包括:(1窗口操作函數(shù),窗口初始化、窗口大小、窗口位置等函數(shù)glutInit( glutInitDisplayMode( glutInitWindowSize(

11、 glutInitWindowPosition(等。(2回調(diào)函數(shù)。響應(yīng)刷新消息、鍵盤消息、鼠標(biāo)消息、定時器函數(shù)等,GlutDisplayFunc( glutPostRedisplay( glutReshapeFunc( glutTimerFunc( glutKeyboardFunc( glutMouseFunc(。(3創(chuàng)建復(fù)雜的三維物體。這些和aux庫的函數(shù)功能相同。創(chuàng)建網(wǎng)狀體和實心體。如glutSolidSphere(、glutWireSphere(等。在此不再敘述。(4菜單函數(shù)。創(chuàng)建添加菜單的函數(shù)GlutCreateMenu(、glutSetMenu(、glutAddMenuEntry(、

12、glutAddSubMenu( 和glutAttachMenu(。(5程序運行函數(shù),glutMainLoop(。(一庫函數(shù)開發(fā)基于OpenGL的應(yīng)用程序,必須先了解OpenGL的庫函數(shù)。它采用C語言風(fēng)格,提供大量的函數(shù)來進(jìn)行圖形的處理和顯示。OpenGL圖形庫一共有100多個函數(shù),它們分別屬于OpenGL的基本庫、實用庫、輔助庫等不同的庫。1、核心庫,包含的函數(shù)有115個,它們是最基本的函數(shù),其前綴是gl;這部分函數(shù)用于常規(guī)的、核心的圖形處理,由gl.dll來負(fù)責(zé)解釋執(zhí)行。核心庫中的函數(shù)可以進(jìn)一步分為以下幾類函數(shù)。(1繪制基本幾何圖元的函數(shù)。glBegain(、glEnd(、glNormal*

13、(、glV ertex*(。(2矩陣操作、幾何變換和投影變換的函數(shù)。矩陣入棧函數(shù)glPushMatrix(,矩陣出棧函數(shù)glPopMatrix(,裝載矩陣函數(shù)glLoadMatrix(,矩陣相乘函數(shù)glMultMatrix(,當(dāng)前矩陣函數(shù)glMatrixMode(和矩陣標(biāo)準(zhǔn)化函數(shù)glLoadIdentity(,幾何變換函數(shù)glTranslate*(、glRotate*(和glScale*(,投影變換函數(shù)glOrtho(、glFrustum(和視口變換函數(shù)glV iewport(等等。(3顏色、光照和材質(zhì)的函數(shù)。如設(shè)置顏色模式函數(shù)glColor*(、glIndex*(,設(shè)置光照效果的函數(shù)glLi

14、ght*( 、glLightModel*(和設(shè)置材質(zhì)效果函數(shù)glMaterial(等等。(4顯示列表函數(shù)。主要有創(chuàng)建、結(jié)束、生成、刪除和調(diào)用顯示列表的函數(shù)glNewList(、glEndList(、glGenLists(、glCallList(和glDeleteLists(等。(5紋理映射函數(shù)。主要有一維紋理函數(shù)glTexImage1D(、二維紋理函數(shù)glTexImage2D(、設(shè)置紋理參數(shù)、紋理環(huán)境和紋理坐標(biāo)的函數(shù)glTexParameter*(、glTexEnv*(和glTetCoord*(等。(6特殊效果函數(shù)。融合函數(shù)glBlendFunc(、反走樣函數(shù)glHint(和霧化效果glFog

15、*(。(7光柵化、象素操作函數(shù)。像素位置glRasterPos*(、線型寬度glLineWidth(、多邊形繪制模式glPolygonMode(,讀取象素glReadPixel(、復(fù)制象素glCopyPixel(等。(8選擇與反饋函數(shù)。主要有渲染模式glRenderMode(、選擇緩沖區(qū)glSelectBuffer(和反饋緩沖區(qū)glFeedbackBuffer(等。(9曲線與曲面的繪制函數(shù)。生成曲線或曲面的函數(shù)glMap*(、glMapGrid*(,求值器的函數(shù)glEvalCoord*( glEvalMesh*(。(10狀態(tài)設(shè)置與查詢函數(shù)。主要有g(shù)lGet*(、glEnable(、glGetE

16、rror(等。2、實用庫(OpenGL utility library,GLU,包含的函數(shù)功能更高一些,如繪制復(fù)雜的曲線曲面、高級坐標(biāo)變換、多邊形分割等,共有43個,前綴為glu。Glu函數(shù)通過調(diào)用核心庫的函數(shù),為開發(fā)者提供相對簡單的用法,實現(xiàn)一些較為復(fù)雜的操作。此類函數(shù)由glu.dll 來負(fù)責(zé)解釋執(zhí)行。主要包括了以下幾種:(1輔助紋理貼圖函數(shù)。有g(shù)luScaleImage( 、gluBuild1Dmipmaps(、gluBuild2Dmipmaps(等。(2坐標(biāo)轉(zhuǎn)換和投影變換函數(shù)。定義投影方式函數(shù)gluPerspective(、gluOrtho2D( 、gluLookAt(,拾取投影視景體函

17、數(shù)gluPickMatrix(,投影矩陣計算gluProject(和gluUnProject(等。(3多邊形鑲嵌工具。有g(shù)luNewTess(、gluDeleteTess(、gluTessCallback(、gluBeginPolygon( gluTessV ertex(、gluNextContour(、gluEndPolygon(等。(4二次曲面繪制工具。主要有繪制球面、錐面、柱面、圓環(huán)面gluNewQuadric(、gluSphere(、gluCylinder(、gluDisk(、gluPartialDisk(、gluDeleteQuadric(等等。(5非均勻有理B樣條繪制工具。主要用來

18、定義和繪制Nurbs曲線和曲面,包括gluNewNurbsRenderer(、gluNurbsCurve(、gluBeginSurface(、gluEndSurface(、gluBeginCurve(、gluNurbsProperty(等函數(shù)。(6錯誤反饋工具。獲取出錯信息的字符串gluErrorString(等。3、OpenGL輔助庫(OpenGL auxiliarylibrary,GLAUX,包括簡單的窗口管理、輸入事件處理、某些復(fù)雜三維物體繪制等函數(shù),共有31個,前綴為aux。此類函數(shù)由glaux.dll 來負(fù)責(zé)解釋執(zhí)行。輔助庫函數(shù)主要包括以下幾類。(1窗口初始化和退出函數(shù)。auxIni

19、tDisplayMode(和auxInitPosition(。(2窗口處理和時間輸入函數(shù)。auxReshapeFunc(、auxKeyFunc(和auxMouseFunc(。(3顏色索引裝入函數(shù)。auxSetOneColor(。(4三維物體繪制函數(shù)。包括了兩種形式網(wǎng)狀體和實心體,如繪制立方體auxWireCube(和auxSolidCube(。這里以網(wǎng)狀體為例,長方體auxWireBox(、環(huán)形圓紋面auxWireTorus(、圓柱auxWireCylinder(、二十面體auxWireIcosahedron(、八面體auxWireOctahedron(、四面體auxWireTetrahedr

20、on(、十二面體auxWireDodecahedron(、圓錐體auxWireCone(和茶壺auxWireTeapot(。繪制實心體只要將上述函數(shù)中的確"Wire"更換成"Solid"就可以了。(5其他。背景過程管理函數(shù)auxIdleFunc(;程序運行函數(shù)auxMainLoop(。4、OpenGL工具庫(penGL Utility Toolkit包含大約30多個函數(shù),函數(shù)名前綴為glut,此函數(shù)由glut.dll來負(fù)責(zé)解釋執(zhí)行。這部分函數(shù)主要包括:(1窗口操作函數(shù)窗口初始化、窗口大小、窗口位置等函數(shù)glutInit( glutInitDisplayM

21、ode(、glutInitWindowSize( glutInitWindowPosition(等。(2回調(diào)函數(shù)。響應(yīng)刷新消息、鍵盤消息、鼠標(biāo)消息、定時器函數(shù)等,GlutDisplayFunc(、glutPostRedisplay(、glutReshapeFunc(、glutTimerFunc(、glutKeyboardFunc(、glutMouseFunc(。(3創(chuàng)建復(fù)雜的三維物體。這些和aux庫的函數(shù)功能相同。創(chuàng)建網(wǎng)狀體和實心體。如glutSolidSphere(、glutWireSphere(等。(4菜單函數(shù)創(chuàng)建添加菜單的函數(shù)GlutCreateMenu(、glutSetMenu(、gl

22、utAddMenuEntry(、glutAddSubMenu( 和glutAttachMenu(。(5程序運行函數(shù)。glutMainLoop(。5、16個WGL函數(shù),專門用于OpenGL和Windows窗口系統(tǒng)的聯(lián)接,其前綴為wgl,主要用于創(chuàng)建和選擇圖形操作描述表(renderingcontexts以及在窗口內(nèi)任一位置顯示字符位圖。這類函數(shù)主要包括以下幾類(1繪圖上下文相關(guān)函數(shù)。wglCreateContext(、wglDeleteContext(、wglGetCurrentContent(、wglGetCurrentDC( wglDeleteContent(等。(2文字和文本處理函數(shù)。wg

23、lUseFontBitmaps(、wglUseFontOutlines(。(3覆蓋層、地層和主平面層處理函數(shù)。wglCopyContext(、wglCreateLayerPlane(、wglDescribeLayerPlane(、wglReakizeLayerPlatte(等。(4其他函數(shù)。wglShareLists(、wglGetProcAddress(等。6、另外,還有五個Win32函數(shù)用來處理像素格式(pixel formats和雙緩存。由于它們是對Win32系統(tǒng)的擴(kuò)展,因此不能應(yīng)用在其它OpenGL平臺上。(二OpenGL數(shù)據(jù)類型與C語言相對應(yīng),OpenGL中也有整數(shù)、字節(jié)、浮點數(shù)等數(shù)

24、據(jù)類型,為了說明兩者的對應(yīng)關(guān)系,下表將OpenGL的數(shù)據(jù)類型與相應(yīng)的C類型進(jìn)行了對比:前綴數(shù)據(jù)類型相應(yīng)C語言類型OpenGL類型b 8-bit integer signed char GLbytes 16-bit integer short GLshorti 32-bit integer long GLint,GLsizeif 32-bit floating-point float GLfloat,GLclampfd 64-bit floating-point double GLdouble,GLclampdub 8-bit unsigned integer unsigned char GLu

25、byte,GLbooleanus 16-bit unsigned integer unsigned short GLushortui 32-bit unsigned integer unsigned long GLuint,GLenum,GLbitfield表一、OpenGL數(shù)據(jù)類型表此外,OpenGL也定義GLvoid類型,如果用C語言編寫,可以用它替代void類型。(三OpenGL庫函數(shù)的命名規(guī)律了解了OpenGL的數(shù)據(jù)類型,讓我們再回過頭來看看OpenGL庫函數(shù)的命名規(guī)律。所有OpenGL函數(shù)采用了以下格式:<庫前綴><根命令><可選的參數(shù)個數(shù)><

26、;可選的參數(shù)類型>庫前綴有g(shù)l、glu、aux、glut、wgl、glx等等,分別表示該函數(shù)屬于OpenGL某開發(fā)庫等,從函數(shù)名后面中還可以看出需要多少個參數(shù)以及參數(shù)的類型。I代表int型,f代表float 型,d代表double型,u代表無符號整型。注意,有的函數(shù)參數(shù)類型后綴前帶有數(shù)字2、3、4。2代表二維,3代表三維,4代表alpha值(以后介紹。有些OpenGL函數(shù)最后帶一個字母v,表示函數(shù)參數(shù)可用一個指針指向一個向量(或數(shù)組來替代一系列單個參數(shù)值。下面兩種格式都表示設(shè)置當(dāng)前顏色為紅色,二者等價。glColor3f(1.0,0.0,0.0;等價于:float color_array

27、=1.0,0.0,0.0;glColor3fv(color_array;除了以上基本命名方式外,還有一種帶"*"星號的表示方法,例如glColor*(,它表示可以用函數(shù)的各種方式來設(shè)置當(dāng)前顏色。同理,glV ertex*v(表示用一個指針指向所有類型的向量來定義一系列頂點坐標(biāo)值。第一篇GL庫函數(shù)第一章使用顏色l. l glshadeModel-選擇平面明暗模式或光滑明暗模式1. 2 glColor-設(shè)置當(dāng)前顏色1. 3 glColorPointer-定義顏色數(shù)組1. 4 gllndex-設(shè)置當(dāng)前顏色索引1. 5 gllndexPointer-定義顏色索引數(shù)組1. 6 glC

28、OforTableEXT-為目標(biāo)調(diào)色板紋理指定調(diào)色板的格式和大小1. 7 glColorsubTableEXT-指定需要替代的目標(biāo)紋理調(diào)色板的一部分第二章繪制幾何圖原及物體2. l glVertex-指定頂點2. 2 glVertexPointer-定義頂點數(shù)據(jù)數(shù)組2. 3 glArrayElement-指定用來繪制頂點的數(shù)組元素2. 4 glBegin, glEnd-限定一個或多個圖原頂點的繪制2. 5 glEdgeFlag, glEdgeFlagy-指定邊界標(biāo)記2. 6 glPointsize-指定光柵化點的直徑2. 7 glLinewidth-指定光柵化直線的寬度2. 8 glLines

29、tipple-指定點劃線2. 9 glPolygonMode-選擇多邊形光柵化模式2. 10 glFrontFace-定義正面多邊形和反反面多邊形2. 11 glPolygonstipple-設(shè)置多邊形點劃圖2. 12 glDrawElements-從數(shù)組數(shù)據(jù)繪制圖原2. 13 glRect-繪制矩形第三章坐標(biāo)轉(zhuǎn)換3. l glTranslate-用平移矩陣乘以當(dāng)前矩陣3. 2 glRotate-用旋轉(zhuǎn)矩陣乘以當(dāng)前矩陣3. 3 glscale-用縮放矩陣乘以當(dāng)前矩陣3. 4 glViewport-設(shè)置機(jī)口3. 5 glFrustum-用透視矩陣乘以當(dāng)前矩陣3. 6 glorthO-用正視矩陣乘

30、以當(dāng)前矩陣3. 7 glClipPlane-指定切割幾何物體的平面第四章堆棧操作4. l glLoadMatrix-用任意矩陣替換當(dāng)前矩陣4. 2 glMultMatrix-用任意矩陣乘以當(dāng)前矩陣4. 3 glMatrixMode-指定哪一個矩陣是當(dāng)前矩陣4. 4 glPushMatrix, glPopMatrix-壓人和彈出當(dāng)前矩陣堆棧4. 5 glPushAttrib, glPopAttrib-壓人和彈出屬性堆棧4. 6 glPushClientAttrib, glPopClientAttrib-在客戶屬性堆棧中保存和恢復(fù)客戶狀態(tài)變量組4. 7 glPushName, gPopName-壓

31、人和彈出名稱堆棧4. 8 gllnitNames-初始名稱堆棧4, 9 glLoadName-向名稱堆棧中裝載名稱第五章顯示列表5. l glNewList, glEndList-創(chuàng)建或替換一個顯示列表5. 2 glCallLISt-執(zhí)行一個顯示列表5. 3 glCallLISts-執(zhí)行一列顯示列表5. 4 glGenLists-生成一組空的相鄰的顯示列表5. 5 glDeleteLists-刪除一組相鄰的顯示列表5. 6 gllSLISt-檢驗顯示列表的存在第六章使用光照和材質(zhì)6. l glNormal-設(shè)置當(dāng)前的法向量6. 2 glNormalPointer-定義法向量數(shù)組6. 3 glL

32、ight-設(shè)置光源參數(shù)6. 4 glLightModel-設(shè)置光照模型參數(shù)6. 5 glMaterial-為光照模型指定材質(zhì)參數(shù)6. 6 glColorMateria-使材質(zhì)顏色跟蹤當(dāng)前顏色第七章像素操作7. l glRasterPos-為像素操作指定光柵位置7. 2 glBitmap-繪制位圖7. 3 glReadPixels-從幀緩存中讀取一塊像素7. 4 glDrawPixels-將一個像素塊寫人幀緩存7. 5 glCopyPixels-在幀緩存中拷貝像素7. 6 glCopyTexlmage1D-將像素從幀緩存拷貝到一維紋理圖像中7. 7 glCopyTexlmageZD-把像素從幀緩

33、存拷貝到二維紋理圖像中7. 8 glCopyTexsublmagelD-從幀緩存中拷貝一維紋理圖像的子圖像7. 9 glCopyTexsublmageZD-從幀緩存中拷貝二維紋理圖像的子圖像7. 10 glPixelZoom-指定像素縮放因子7. 11 glPixelstore-設(shè)置像素存儲模式7. 12 glPixelTransfer-設(shè)置像素傳輸模式7. 13 glPixelMap-設(shè)置像素傳輸映射表第八章紋理映射8. l glTexlmagelD-指定一維紋理圖像8. 2 glTexlmageZD-指定二維紋理映像8. 3 glTexParameter-設(shè)置紋理參數(shù)8. 4 glTexs

34、ublmage1D-指定已存在的一維紋理圖像的一部分8. 5 glTexsublmageZD-指定已存在的二維紋理圖像的一部分8. 6 glTexEnv-設(shè)置紋理環(huán)境參數(shù)8. 7 glTexCoord-設(shè)置當(dāng)前紋理坐標(biāo)8. 8 glTexGen-控制紋理坐標(biāo)的生成8. 9 glTexCoordPointer-定義紋理坐標(biāo)數(shù)組8. 10 glDeleteTextures-刪除命名的紋理第九章特殊效果操作9. l glBlendFunc-指定像素的數(shù)學(xué)算法9. 2 glHint-指定由實現(xiàn)確定的控制行為9. 3 glFOg-指定霧化參數(shù)第十章幀緩存操作10. l glClear-將緩存清除為預(yù)先的

35、設(shè)置值10. 2 glClearAccum-設(shè)置累加緩存的清除值10. 3 glClearCo lor-設(shè)置顏色緩存的清除值10. 4 glClearDepth-設(shè)置深度緩存的清除值10. 5 glClearlndex-設(shè)置顏色索引緩存的清除值10. 6 glClearstencil-設(shè)置模板緩存的清除值10. 7 glDrawBuffer-指定繪制的顏色緩存10. 8 gllndexMask-控制顏色索引緩存中單個位的寫操作10. 9 glColorMask-激活或關(guān)閉幀緩存顏色分量的寫操作10. 10 glDepthMask-激活或關(guān)閉對深度緩存的寫操作10. 11 glstencilMa

36、sk-控制模板平面中單個位的寫操作10. 12 glAlphaFunc-一指定alpha檢驗函數(shù)10. 13 glstencilFunc-設(shè)置模板檢驗函數(shù)和參考值10. 14 glstencilop-設(shè)置模板檢驗操作10. 15 glDepthFunc-指定深度比較中使用的數(shù)值10. 16 glDepthRange-指定從單位化的設(shè)備坐標(biāo)到窗口坐標(biāo)的z值映射10. 17 glLOgiCOp-為顏色索引繪制指定邏輯像素操作10. 18 glACCum-對累加緩存進(jìn)行操作第十一章繪制曲線和曲面11. l glEvalCoord-求取激活的一維和二維紋理圖11. 2 glMapl-定義一維求值器11

37、. 3 glMapZ-定義二維求值器11. 4 glMapGrid-定義一維或二維網(wǎng)格11. 5 glEvalMesh-計算一維或二維點網(wǎng)格或線網(wǎng)格11. 6 glEvalPoint-生成并求取網(wǎng)格中的單個點第十二章查詢函數(shù)12. l glGet-返回所選擇的參數(shù)值12. 2 glGetClipPlane-返回指定的切平面系數(shù)12. 3 glGetColorTableEXT-獲得當(dāng)前目標(biāo)紋理調(diào)色板的顏色表數(shù)據(jù)12. 4 glGetColorTableParameterfvEXT, glGetColorTableParameterlvEXT-從顏色表中獲得調(diào)色板參數(shù)12. 5 glGetErro

38、r-返回錯誤信息12. 6 glGetLight-返回光源參數(shù)值12. 7 glGetMap-返回求值器參數(shù)12. 8 glGetMaterial-返回材質(zhì)參數(shù)12. 9 glGetPixelMap-返回指定的像素映像12. 10 glGetPointery-返回頂點數(shù)據(jù)數(shù)組地J12. 11 glGetPolygonstipple-返回多邊形點戈12. 12 glGetstring-返回描述當(dāng)前OpenGL12. 13 glGetTexEnv-返回紋理環(huán)境參數(shù)12. 14 glGetTexGen-返回紋理坐標(biāo)生成參數(shù)12. 15 glGetTexlmage-返回紋理圖像12. 16 glGet

39、TexLevelParameter-返回指定細(xì)節(jié)水平的紋理參數(shù)值12. 17 glGetTexParameter-返回紋理參數(shù)值基于VC+的OpenGL編程講座之概述時間:2008-12-17 17:29:02來源:網(wǎng)絡(luò)作者:未知點擊:700次前言隨著計算機(jī)多媒體技術(shù)、可視化技術(shù)及圖形學(xué)技術(shù)的發(fā)展,我們可以使用計算機(jī)來精確地再現(xiàn)現(xiàn)實世界中的絢麗多彩的三維物體,并充分發(fā)揮自身的創(chuàng)造性思維,通過人機(jī)交互來模擬、改造現(xiàn)實世界,這就是目前最為時髦的虛擬現(xiàn)實技術(shù)。通過這種技術(shù),建筑工程師可以直接設(shè)計出美觀的樓房模型;軍事指揮員可以模擬戰(zhàn)場進(jìn)行軍事推演,網(wǎng)民可以足不出戶游覽故宮博物館等名勝古跡等。而虛擬現(xiàn)

40、實技術(shù)最重要的一部分內(nèi)容就是三維圖形編程。當(dāng)前,三維圖形編程工具中最為突出的是SGI公司的OpenGL(Open Graphics Language,開放式的圖形語言,它已經(jīng)成為一個工業(yè)標(biāo)準(zhǔn)的計算機(jī)三維圖形軟件開發(fā)接口,并廣泛應(yīng)用于游戲開發(fā)、建筑、產(chǎn)品設(shè)計、醫(yī)學(xué)、地球科學(xué)、流體力學(xué)等領(lǐng)域。值得一提的是,雖然微軟有自己的三維編程開發(fā)工具DirectX,但它也提供OpenGL圖形標(biāo)準(zhǔn),因此,OpenGL可以在微機(jī)中廣泛應(yīng)用。目前,OpenGL在國內(nèi)外都掀起了熱潮,但國內(nèi)對這一領(lǐng)域介紹的資料并不是很多,特別是有志于在圖形圖像方面進(jìn)行深入研究的讀者朋友,常??嘤诓徽莆誒penGL編程接口技術(shù),無法向縱

41、深領(lǐng)域擴(kuò)展。為了開啟三維圖形編程這扇神秘大門,本講座在結(jié)合OpenGL 有關(guān)理論知識的基礎(chǔ)上,著重介紹Visual C+6.0開發(fā)環(huán)境中的編程實現(xiàn),由于水平有限,本講座可能無法面面俱到,存在一些疏漏,但相信它可以將開啟"神秘大門"的鑰匙交給讀者朋友們。一、OpenGL的特點及功能OpenGL是用于開發(fā)簡捷的交互式二維和三維圖形應(yīng)用程序的最佳環(huán)境,任何高性能的圖形應(yīng)用程序,從3D動畫、CAD輔助設(shè)計到可視化訪真,都可以利用OpenGL高質(zhì)量、高性能的特點。OpenGL自1992年出現(xiàn)以來,逐漸發(fā)展完善,已成為一個唯一開放的,獨立于應(yīng)用平臺的圖形標(biāo)準(zhǔn),一個典型的OpenGL應(yīng)用

42、程序可以在任何平臺上運行-只需要使用目標(biāo)系統(tǒng)的OpenGL庫重新編譯一下。OpenGL非常接近硬件,是一個圖形與硬件的接口,包括了100多個圖形函數(shù)用來建立三維模型和進(jìn)行三維實時交互。OpenGL強(qiáng)有力的圖形函數(shù)不要求開發(fā)人員把三維物體模型的數(shù)據(jù)寫成固定的數(shù)據(jù)格式,也不要求開發(fā)人員編寫矩陣變換、外部設(shè)備訪問等函數(shù),大大地簡化了編寫三維圖形的程序。例如:1 OpenGL提供一系列的三維圖形單元(圖元供開發(fā)者調(diào)用。2 OpenGL提供一系列的圖形變換函數(shù)。3 OpenGL提供一系列的外部設(shè)備訪問函數(shù),使開發(fā)者可以方便地訪問鼠標(biāo)、鍵盤、空間球、數(shù)據(jù)手套等外部設(shè)備。由于微軟在Windows中包含了Op

43、enGL,所以O(shè)penGL可以與V isual C+緊密接合,簡單快捷地實現(xiàn)有關(guān)計算和圖形算法,并保證算法的正確性和可靠性。簡單地說,OpenGL具有建模、變換、色彩處理、光線處理、紋理影射、圖像處理、動畫及物體運動模糊等功能:1、建模OpenGL圖形庫除了提供基本的點、線、多邊形的繪制函數(shù)外,還提供了復(fù)雜的三維物體,如球、錐、多面體、茶壺以及復(fù)雜曲線和曲面(例如Bezier、Nurbs等曲線或曲面的繪制函數(shù)。2、變換OpenGL圖形庫的變換包括基本變換和投影變換?;咀儞Q有平移、旋轉(zhuǎn)、變比、鏡像四種變換,投影變換有平行投影(又稱正射投影和透視投影兩種變換。3、顏色模式設(shè)置OpenGL顏色模式

44、有兩種,即RGBA模式和顏色索引(Color Index。4、光照和材質(zhì)設(shè)置OpenGL光有輻射光(Emitted Light、環(huán)境光(Ambient Light、漫反射光(Diffuse Light和鏡面光(Specular Light。材質(zhì)是用光反射率來表示。客觀世界中的物體最終反映到人眼的顏色是光的紅綠藍(lán)分量與材質(zhì)紅綠藍(lán)分量的反射率相乘后形成的顏色。5、紋理映射(Texture Mapping利用OpenGL紋理映射功能可以十分逼真地表達(dá)物體表面細(xì)節(jié)。6、位圖顯示和圖象增強(qiáng)OpenGL的圖象功能除了基本的拷貝和像素讀寫外,還提供融合(Blending、反走樣(Antialiasing和霧

45、(fog的特殊圖象效果處理。以上三條可是被仿真物更具真實感,增強(qiáng)圖形顯示的效果。7、雙緩存動畫(Double BufferingOpenGL使用了前臺緩存和后臺緩存交替顯示場景(Scene技術(shù),簡而言之,后臺緩存計算場景、生成畫面,前臺緩存顯示后臺緩存已畫好的畫面。8、特殊效果利用OpenGL還能實現(xiàn)深度暗示(Depth Cue、運動模糊(Motion Blur等特殊效果。運動模糊的繪圖方式(motion-blured,模擬物體運動時人眼觀察所感覺的動感現(xiàn)象。深度域效果(depth-of-effects,類似于照相機(jī)鏡頭效果,模型在聚焦點處清晰,反之則模糊。這些三維物體繪圖和特殊效果處理方式,

46、說明OpenGL能夠模擬比較復(fù)雜的三維物體或自然景觀。二、OpenGL工作流程OpenGL的基本工作流程如下圖:圖一、OpenGL工作流程如上圖所示,幾何頂點數(shù)據(jù)包括模型的頂點集、線集、多邊形集,這些數(shù)據(jù)經(jīng)過流程圖的上部,包括運算器、逐個頂點操作等;圖像數(shù)據(jù)包括象素集、影像集、位圖集等,圖像象素數(shù)據(jù)的處理方式與幾何頂點數(shù)據(jù)的處理方式是不同的,但它們都經(jīng)過光柵化、逐個片元(Fragment處理直至把最后的光柵數(shù)據(jù)寫入幀緩沖器。在OpenGL中的所有數(shù)據(jù)包括幾何頂點數(shù)據(jù)和象素數(shù)據(jù)都可以被存儲在顯示列表中或者立即可以得到處理。OpenGL中,顯示列表技術(shù)是一項重要的技術(shù)。OpenGL要求把所有的幾何

47、圖形單元都用頂點來描述,這樣運算器和逐個頂點計算操作都可以針對每個頂點進(jìn)行計算和操作,然后進(jìn)行光柵化形成圖形碎片;對于象素數(shù)據(jù),象素操作結(jié)果被存儲在紋理組裝用的內(nèi)存中,再象幾何頂點操作一樣光柵化形成圖形片元。整個流程操作的最后,圖形片元都要進(jìn)行一系列的逐個片元操作,這樣最后的象素值送入幀緩沖器實現(xiàn)圖形的顯示。根據(jù)這個流程,我們可以歸納出在OpenGL中進(jìn)行主要的圖形操作直至在計算機(jī)屏幕上渲染繪制出三維圖形景觀的基本步驟:1根據(jù)基本圖形單元建立景物模型,并且對所建立的模型進(jìn)行數(shù)學(xué)描述(OpenGL中把:點、線、多邊形、圖像和位圖都作為基本圖形單元。2把景物模型放在三維空間中的合適的位置,并且設(shè)置

48、視點(viewpoint以觀察所感興趣的景觀。3計算模型中所有物體的色彩,其中的色彩根據(jù)應(yīng)用要求來確定,同時確定光照條件、紋理粘貼方式等。4把景物模型的數(shù)學(xué)描述及其色彩信息轉(zhuǎn)換至計算機(jī)屏幕上的象素,這個過程也就是光柵化(rasterization。在這些步驟的執(zhí)行過程中,OpenGL可能執(zhí)行其他的一些操作,例如自動消隱處理等。另外,景物光柵化之后被送入幀緩沖器之前還可以根據(jù)需要對像素數(shù)據(jù)進(jìn)行操作。三、Windows 中OpenGL庫函數(shù)及數(shù)據(jù)類型(一庫函數(shù)開發(fā)基于OpenGL的應(yīng)用程序,必須先了解OpenGL的庫函數(shù)。它采用C語言風(fēng)格,提供大量的函數(shù)來進(jìn)行圖形的處理和顯示。OpenGL圖形庫一

49、共有100多個函數(shù),它們分別屬于OpenGL的基本庫、實用庫、輔助庫等不同的庫。1、核心庫,包含的函數(shù)有115個,它們是最基本的函數(shù),其前綴是gl;這部分函數(shù)用于常規(guī)的、核心的圖形處理,由gl.dll來負(fù)責(zé)解釋執(zhí)行。核心庫中的函數(shù)可以進(jìn)一步分為以下幾類函數(shù)。(1繪制基本幾何圖元的函數(shù)。glBegain(、glEnd(、glNormal*(、glV ertex*(。(2矩陣操作、幾何變換和投影變換的函數(shù)。矩陣入棧函數(shù)glPushMatrix(,矩陣出棧函數(shù)glPopMatrix(,裝載矩陣函數(shù)glLoadMatrix(,矩陣相乘函數(shù)glMultMatrix(,當(dāng)前矩陣函數(shù)glMatrixMode

50、(和矩陣標(biāo)準(zhǔn)化函數(shù)glLoadIdentity(,幾何變換函數(shù)glTranslate*(、glRotate*(和glScale*(,投影變換函數(shù)glOrtho(、glFrustum(和視口變換函數(shù)glV iewport(等等。(3顏色、光照和材質(zhì)的函數(shù)。如設(shè)置顏色模式函數(shù)glColor*(、glIndex*(,設(shè)置光照效果的函數(shù)glLight*( 、glLightModel*(和設(shè)置材質(zhì)效果函數(shù)glMaterial(等等。(4顯示列表函數(shù)。主要有創(chuàng)建、結(jié)束、生成、刪除和調(diào)用顯示列表的函數(shù)glNewList(、glEndList(、glGenLists(、glCallList(和glDelete

51、Lists(等。(5紋理映射函數(shù)。主要有一維紋理函數(shù)glTexImage1D(、二維紋理函數(shù)glTexImage2D(、設(shè)置紋理參數(shù)、紋理環(huán)境和紋理坐標(biāo)的函數(shù)glTexParameter*(、glTexEnv*(和glTetCoord*(等。(6特殊效果函數(shù)。融合函數(shù)glBlendFunc(、反走樣函數(shù)glHint(和霧化效果glFog*(。(7光柵化、象素操作函數(shù)。像素位置glRasterPos*(、線型寬度glLineWidth(、多邊形繪制模式glPolygonMode(,讀取象素glReadPixel(、復(fù)制象素glCopyPixel(等。(8選擇與反饋函數(shù)。主要有渲染模式glRend

52、erMode(、選擇緩沖區(qū)glSelectBuffer(和反饋緩沖區(qū)glFeedbackBuffer(等。(9曲線與曲面的繪制函數(shù)。生成曲線或曲面的函數(shù)glMap*(、glMapGrid*(,求值器的函數(shù)glEvalCoord*( glEvalMesh*(。(10狀態(tài)設(shè)置與查詢函數(shù)。主要有g(shù)lGet*(、glEnable(、glGetError(等。2、實用庫(OpenGL utility library,GLU,包含的函數(shù)功能更高一些,如繪制復(fù)雜的曲線曲面、高級坐標(biāo)變換、多邊形分割等,共有43個,前綴為glu。Glu函數(shù)通過調(diào)用核心庫的函數(shù),為開發(fā)者提供相對簡單的用法,實現(xiàn)一些較為復(fù)雜的操作

53、。此類函數(shù)由glu.dll 來負(fù)責(zé)解釋執(zhí)行。主要包括了以下幾種:(1輔助紋理貼圖函數(shù)。有g(shù)luScaleImage( 、gluBuild1Dmipmaps(、gluBuild2Dmipmaps(等。(2坐標(biāo)轉(zhuǎn)換和投影變換函數(shù)。定義投影方式函數(shù)gluPerspective(、gluOrtho2D( 、gluLookAt(,拾取投影視景體函數(shù)gluPickMatrix(,投影矩陣計算gluProject(和gluUnProject(等。(3多邊形鑲嵌工具。有g(shù)luNewTess(、gluDeleteTess(、gluTessCallback(、gluBeginPolygon( gluTessV e

54、rtex(、gluNextContour(、gluEndPolygon(等。(4)二次曲面繪制工具。 主要有繪制球面、錐面、柱面、圓環(huán)面 gluNewQuadric(、gluSphere(、gluCylinder(、 gluDisk(、gluPartialDisk(、gluDeleteQuadric(等等。 (5)非均勻有理 B 樣條繪制工具。 主要用來定義和繪制 Nurbs 曲線和曲面, 包括 gluNewNurbsRenderer(、 gluNurbsCurve(、 gluBeginSurface(、gluEndSurface(、gluBeginCurve(、gluNurbsPropert

55、y(等函數(shù)。 (6)錯誤反饋工具。 獲取出錯信息的字符串 gluErrorString(等。 3、OpenGL 輔助庫(OpenGL auxiliarylibrary,GLAUX) ,包括簡單的窗口管理、輸入 事件處理、某些復(fù)雜三維物體繪制等函數(shù),共有 31 個,前綴為 aux。此類函數(shù)由 glaux.dll 來負(fù)責(zé)解釋執(zhí)行。輔助庫函數(shù)主要包括以下幾類。 (1)窗口初始化和退出函數(shù)。 auxInitDisplayMode(和 auxInitPosition(。 (2)窗口處理和時間輸入函數(shù)。 auxReshapeFunc(、auxKeyFunc(和 auxMouseFunc(。 (3)顏色索引

56、裝入函數(shù)。 auxSetOneColor(。 (4)三維物體繪制函數(shù)。 包括了兩種形式網(wǎng)狀體和實心體,如繪制立方體 auxWireCube(和 auxSolidCube(。這 里以網(wǎng)狀體為例, 長方體 auxWireBox(、 環(huán)形圓紋面 auxWireTorus(、 圓柱 auxWireCylinder(、 二十面體 auxWireIcosahedron(、八面體 auxWireOctahedron(、四面體 auxWireTetrahedron(、 十二面體 auxWireDodecahedron(、圓錐體 auxWireCone(和茶壺 auxWireTeapot(。繪制實心 體只要將上

57、述函數(shù)中的確"Wire"更換成"Solid"就可以了。 (5)其他。 背景過程管理函數(shù) auxIdleFunc(;程序運行函數(shù) auxMainLoop(。 4、OpenGL 工具庫(penGL Utility Toolkit) 包含大約 30 多個函數(shù),函數(shù)名前綴為 glut,此函數(shù)由 glut.dll 來負(fù)責(zé)解釋執(zhí)行。這部分 函數(shù)主要包括: (1)窗口操作函數(shù) 窗 口 初 始 化 、 窗 口 大 小 、 窗 口 位 置 等 函 數(shù) glutInit( glutInitDisplayMode( 、 glutInitWindowSize( glutInitWindowPosition(等。 (2)回調(diào)函數(shù)。 響 應(yīng) 刷 新 消 息 、 鍵 盤 消 息 、 鼠 標(biāo) 消 息 、 定 時 器 函 數(shù) 等 , GlutDisplayFunc( 、 glutPostRedisplay( 、 glutReshapeFunc( 、 glutTimerFunc( 、 glutKeyboardFunc( 、 glutMouseFunc(。 (3)創(chuàng)建復(fù)

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論