OpenGL 函式庫相關的API有核心庫(gl)、實用庫(glu)、輔助庫(aux)、實用工具庫(glut)、視窗庫(glx、agl、wgl)和擴充套件函式庫等。從圖1可以看出,gl是核心,glu是對gl的部分封裝。glx、agl、wgl 是針對不同視窗系統的函式。glut是為跨平臺的OpenGL程式的工具包,比aux功能強大。擴充套件函式庫是硬體廠商為實現硬體更新利用OpenGL的擴充套件機制開發的函式。下面逐一對這些庫進行詳細介紹。
1.OpenGL核心庫 核心庫包含有115個函式,函式名的字首為gl。 這部分函式用於常規的、核心的圖形處理。此函式由gl.dll來負責解釋執行。由於許多函式可以接收不同數以下幾類。據型別的引數,因此派生出來的函式原形多達300多個。 核心庫中的函式主要可以分為以下幾類函式:
(1)繪製基本幾何圖元的函式。如繪製圖元的函式glBegain()、glEnd()、glNormal*()、glVertex*()。
(2)矩陣操作、幾何變換和投影變換的函式。如矩陣入棧函式glPushMatrix()、矩陣出棧函式glPopMatrix()、裝載矩陣函式glLoadMatrix()、矩陣相乘函式glMultMatrix(),當前矩陣函式 glMatrixMode()和矩陣標準化函式glLoadIdentity(),幾何變換函式glTranslate*()、glRotate*()和 glScale*(),投影變換函式glOrtho()、glFrustum()和視口變換函式glViewport()等等。
(3)顏色、光照和材質的函式。如設定顏色模式函式glColor*()、glIndex*(),設定光照效果的函式glLight*() 、glLightModel*()和設定材質效果函式glMaterial()等等。
(5)紋理對映函式,主要有一維紋理函式glTexImage1D()、二維紋理函式glTexImage2D()、 設定紋理引數、紋理環境和紋理座標的函式glTexParameter*()、glTexEnv*()和glTetCoord*()等。
(6)特殊效果函式。融合函式glBlendFunc()、反走樣函式glHint()和霧化效果glFog*()。
(7)光柵化、象素操作函式。如象素位置glRasterPos*()、線型寬度glLineWidth()、多邊形繪製模式glPolygonMode(),讀取象素glReadPixel()、複製象素glCopyPixel()等。
(8)選擇與反饋函式。主要有渲染模式glRenderMode()、選擇緩衝區glSelectBuffer()和反饋緩衝區glFeedbackBuffer()等。
(9)曲線與曲面的繪製函式。生成曲線或曲面的函式glMap*()、glMapGrid*(),求值器的函式glEvalCoord*() glEvalMesh*()。
(10)狀態設定與查詢函式。主要有glGet*()、glEnable()、glGetError()等。
2.OpenGL實用庫The OpenGL Utility Library (GLU) 包含有43個函式,函式名的字首為glu。 OpenGL提供了強大的但是為數不多的繪圖命令,所有較複雜的繪圖都必須從點。線、面開始。Glu 為了減輕繁重的程式設計工作,封裝了OpenGL函式,Glu函式透過呼叫核心庫的函式,為開發者提供相對簡單的用法,實現一些較為複雜的操作。此函式由 glu.dll來負責解釋執行。OpenGL中的核心庫和實用庫可以在所有的OpenGL平臺上執行。 主要包括了以下幾種:
(1)輔助紋理貼圖函式,有gluScaleImage() 、gluBuild1Dmipmaps()、gluBuild2Dmipmaps()。
(2)座標轉換和投影變換函式,定義投影方式函式gluPerspective()、gluOrtho2D() 、gluLookAt(),拾取投影視景體函式gluPickMatrix(),投影矩陣計算gluProject()和 gluUnProject()等等。
(3)多邊形鑲嵌工具,有gluNewTess()、 gluDeleteTess()、gluTessCallback()、gluBeginPolygon() gluTessVertex()、gluNextContour()、gluEndPolygon()等等。
(4)二次曲面繪製工具,主要有繪製球面、錐面、柱面、圓環面gluNewQuadric()、gluSphere()、gluCylinder()、gluDisk()、gluPartialDisk()、gluDeleteQuadric()等等。
(5)非均勻有理B樣條繪製工具,主要用來定義和繪製Nurbs曲線和曲面,包括gluNewNurbsRenderer()、 gluNurbsCurve()、gluBeginSurface()、gluEndSurface()、gluBeginCurve()、 gluNurbsProperty()等函式。
(6)錯誤反饋工具,獲取出錯資訊的字串gluErrorString()。
3.OpenGL輔助庫 包含有31個函式,函式名字首為aux。 這部分函式提供視窗管理、輸入輸出處理以及繪製一些簡單三維物體。此函式由glaux.dll來負責解釋執行。建立aux庫是為了學習和編寫 OpenGL程式,它更像是一個用於測試創意的預備基礎接管。Aux庫在windows實現有很多錯誤,因此很容易導致頻繁的崩潰。在跨平臺的程式設計例項和演示中,aux很大程度上已經被glut庫取代。OpenGL中的輔助庫不能在所有的OpenGL平臺上執行。 輔助庫函式主要包括以下幾類:
(1)視窗初始化和退出函式,auxInitDisplayMode()和auxInitPosition()。
(2)視窗處理和時間輸入函式,auxReshapeFunc()、auxKeyFunc()和auxMouseFunc()。
(3)顏色索引裝入函式,auxSetOneColor()。
(4)三維物體繪製函式。包括了兩種形式網狀體和實心體,如繪製立方體auxWireCube()和 auxSolidCube()。這裡以網狀體為例,長方體auxWireBox()、環形圓紋面auxWireTorus()、圓柱 auxWireCylinder()、二十面體auxWireIcosahedron()、八面體auxWireOctahedron()、四面體 auxWireTetrahedron()、十二面體auxWireDodecahedron()、圓錐體auxWireCone()和茶壺 auxWireTeapot()。
(5)背景過程管理函式auxIdleFunc()。
(6)程式執行函式auxMainLoop()。
4.OpenGL工具庫 OpenGL Utility Toolkit 包含大約30多個函式,函式名字首為glut。 glut是不依賴於視窗平臺的OpenGL工具包,由Mark KLilgrad在SGI編寫(現在在Nvidia),目的是隱藏不同視窗平臺API的複雜度。函式以glut開頭,它們作為aux庫功能更強的替代品,提供更為複雜的繪製功能,此函式由glut.dll來負責解釋執行。由於glut中的視窗管理函式是不依賴於執行環境的,因此OpenGL中的工具庫可以在X-Window, Windows NT, OS/2等系統下執行,特別適合於開發不需要複雜介面的OpenGL示例程式。對於有經驗的程式設計師來說,一般先用glut理順3D圖形程式碼,然後再整合為完整的應用程式。 這部分函式主要包括:
(1)視窗操作函式,視窗初始化、視窗大小、視窗位置等函式glutInit() glutInitDisplayMode() glutInitWindowSize() glutInitWindowPosition()等。
(2)回撥函式。響應重新整理訊息、鍵盤訊息、滑鼠訊息、定時器函式等,GlutDisplayFunc() glutPostRedisplay() glutReshapeFunc() glutTimerFunc() glutKeyboardFunc() glutMouseFunc()。
(3)建立複雜的三維物體。這些和aux庫的函式功能相同。建立網狀體和實心體。如glutSolidSphere()、glutWireSphere()等。在此不再敘述。
(4)選單函式。建立新增選單的函式GlutCreateMenu()、glutSetMenu()、glutAddMenuEntry()、glutAddSubMenu() 和glutAttachMenu()。
(5)程式執行函式,glutMainLoop()。
OpenGL 函式庫相關的API有核心庫(gl)、實用庫(glu)、輔助庫(aux)、實用工具庫(glut)、視窗庫(glx、agl、wgl)和擴充套件函式庫等。從圖1可以看出,gl是核心,glu是對gl的部分封裝。glx、agl、wgl 是針對不同視窗系統的函式。glut是為跨平臺的OpenGL程式的工具包,比aux功能強大。擴充套件函式庫是硬體廠商為實現硬體更新利用OpenGL的擴充套件機制開發的函式。下面逐一對這些庫進行詳細介紹。
1.OpenGL核心庫 核心庫包含有115個函式,函式名的字首為gl。 這部分函式用於常規的、核心的圖形處理。此函式由gl.dll來負責解釋執行。由於許多函式可以接收不同數以下幾類。據型別的引數,因此派生出來的函式原形多達300多個。 核心庫中的函式主要可以分為以下幾類函式:
(1)繪製基本幾何圖元的函式。如繪製圖元的函式glBegain()、glEnd()、glNormal*()、glVertex*()。
(2)矩陣操作、幾何變換和投影變換的函式。如矩陣入棧函式glPushMatrix()、矩陣出棧函式glPopMatrix()、裝載矩陣函式glLoadMatrix()、矩陣相乘函式glMultMatrix(),當前矩陣函式 glMatrixMode()和矩陣標準化函式glLoadIdentity(),幾何變換函式glTranslate*()、glRotate*()和 glScale*(),投影變換函式glOrtho()、glFrustum()和視口變換函式glViewport()等等。
(3)顏色、光照和材質的函式。如設定顏色模式函式glColor*()、glIndex*(),設定光照效果的函式glLight*() 、glLightModel*()和設定材質效果函式glMaterial()等等。
(5)紋理對映函式,主要有一維紋理函式glTexImage1D()、二維紋理函式glTexImage2D()、 設定紋理引數、紋理環境和紋理座標的函式glTexParameter*()、glTexEnv*()和glTetCoord*()等。
(6)特殊效果函式。融合函式glBlendFunc()、反走樣函式glHint()和霧化效果glFog*()。
(7)光柵化、象素操作函式。如象素位置glRasterPos*()、線型寬度glLineWidth()、多邊形繪製模式glPolygonMode(),讀取象素glReadPixel()、複製象素glCopyPixel()等。
(8)選擇與反饋函式。主要有渲染模式glRenderMode()、選擇緩衝區glSelectBuffer()和反饋緩衝區glFeedbackBuffer()等。
(9)曲線與曲面的繪製函式。生成曲線或曲面的函式glMap*()、glMapGrid*(),求值器的函式glEvalCoord*() glEvalMesh*()。
(10)狀態設定與查詢函式。主要有glGet*()、glEnable()、glGetError()等。
2.OpenGL實用庫The OpenGL Utility Library (GLU) 包含有43個函式,函式名的字首為glu。 OpenGL提供了強大的但是為數不多的繪圖命令,所有較複雜的繪圖都必須從點。線、面開始。Glu 為了減輕繁重的程式設計工作,封裝了OpenGL函式,Glu函式透過呼叫核心庫的函式,為開發者提供相對簡單的用法,實現一些較為複雜的操作。此函式由 glu.dll來負責解釋執行。OpenGL中的核心庫和實用庫可以在所有的OpenGL平臺上執行。 主要包括了以下幾種:
(1)輔助紋理貼圖函式,有gluScaleImage() 、gluBuild1Dmipmaps()、gluBuild2Dmipmaps()。
(2)座標轉換和投影變換函式,定義投影方式函式gluPerspective()、gluOrtho2D() 、gluLookAt(),拾取投影視景體函式gluPickMatrix(),投影矩陣計算gluProject()和 gluUnProject()等等。
(3)多邊形鑲嵌工具,有gluNewTess()、 gluDeleteTess()、gluTessCallback()、gluBeginPolygon() gluTessVertex()、gluNextContour()、gluEndPolygon()等等。
(4)二次曲面繪製工具,主要有繪製球面、錐面、柱面、圓環面gluNewQuadric()、gluSphere()、gluCylinder()、gluDisk()、gluPartialDisk()、gluDeleteQuadric()等等。
(5)非均勻有理B樣條繪製工具,主要用來定義和繪製Nurbs曲線和曲面,包括gluNewNurbsRenderer()、 gluNurbsCurve()、gluBeginSurface()、gluEndSurface()、gluBeginCurve()、 gluNurbsProperty()等函式。
(6)錯誤反饋工具,獲取出錯資訊的字串gluErrorString()。
3.OpenGL輔助庫 包含有31個函式,函式名字首為aux。 這部分函式提供視窗管理、輸入輸出處理以及繪製一些簡單三維物體。此函式由glaux.dll來負責解釋執行。建立aux庫是為了學習和編寫 OpenGL程式,它更像是一個用於測試創意的預備基礎接管。Aux庫在windows實現有很多錯誤,因此很容易導致頻繁的崩潰。在跨平臺的程式設計例項和演示中,aux很大程度上已經被glut庫取代。OpenGL中的輔助庫不能在所有的OpenGL平臺上執行。 輔助庫函式主要包括以下幾類:
(1)視窗初始化和退出函式,auxInitDisplayMode()和auxInitPosition()。
(2)視窗處理和時間輸入函式,auxReshapeFunc()、auxKeyFunc()和auxMouseFunc()。
(3)顏色索引裝入函式,auxSetOneColor()。
(4)三維物體繪製函式。包括了兩種形式網狀體和實心體,如繪製立方體auxWireCube()和 auxSolidCube()。這裡以網狀體為例,長方體auxWireBox()、環形圓紋面auxWireTorus()、圓柱 auxWireCylinder()、二十面體auxWireIcosahedron()、八面體auxWireOctahedron()、四面體 auxWireTetrahedron()、十二面體auxWireDodecahedron()、圓錐體auxWireCone()和茶壺 auxWireTeapot()。
(5)背景過程管理函式auxIdleFunc()。
(6)程式執行函式auxMainLoop()。
4.OpenGL工具庫 OpenGL Utility Toolkit 包含大約30多個函式,函式名字首為glut。 glut是不依賴於視窗平臺的OpenGL工具包,由Mark KLilgrad在SGI編寫(現在在Nvidia),目的是隱藏不同視窗平臺API的複雜度。函式以glut開頭,它們作為aux庫功能更強的替代品,提供更為複雜的繪製功能,此函式由glut.dll來負責解釋執行。由於glut中的視窗管理函式是不依賴於執行環境的,因此OpenGL中的工具庫可以在X-Window, Windows NT, OS/2等系統下執行,特別適合於開發不需要複雜介面的OpenGL示例程式。對於有經驗的程式設計師來說,一般先用glut理順3D圖形程式碼,然後再整合為完整的應用程式。 這部分函式主要包括:
(1)視窗操作函式,視窗初始化、視窗大小、視窗位置等函式glutInit() glutInitDisplayMode() glutInitWindowSize() glutInitWindowPosition()等。
(2)回撥函式。響應重新整理訊息、鍵盤訊息、滑鼠訊息、定時器函式等,GlutDisplayFunc() glutPostRedisplay() glutReshapeFunc() glutTimerFunc() glutKeyboardFunc() glutMouseFunc()。
(3)建立複雜的三維物體。這些和aux庫的函式功能相同。建立網狀體和實心體。如glutSolidSphere()、glutWireSphere()等。在此不再敘述。
(4)選單函式。建立新增選單的函式GlutCreateMenu()、glutSetMenu()、glutAddMenuEntry()、glutAddSubMenu() 和glutAttachMenu()。
(5)程式執行函式,glutMainLoop()。