opengl函式庫介紹
阿新 • • 發佈:2019-02-08
開發基於OpenGL的應用程式,必須先了解OpenGL的庫函式。它採用C語言風格,提供大量的函式來進行圖形的處理和顯示。OpenGL庫函式的命名方式非常有規律。所有OpenGL函式採用了以下格式:
<庫字首><根命令><可選的引數個數><可選的引數型別> 庫字首有gl、glu、aux、glut、wgl、glx、agl等等,分別表示該函式屬於OpenGL那個開發庫,從函式名後面中還可以看出需要多少個引數以及引數的型別。I代表int型,f代表float型,d代表double型,u代表無符號整型。例如glVertex3fv()表示了該函式屬於gl庫,引數是三個float型引數指標。我們用glVertex*() 來表示這一類函式。 OpenGL函式庫相關的API有核心庫(gl)、實用庫(glu)、輔助庫(aux)、實用工具庫(glut)、視窗庫(glx、agl、wgl)和擴充套件函式庫等。從圖可以看出,gl是核心,glu是對gl的部分封裝。glx、agl、wgl 是針對不同視窗系統的函式。glut是為跨平臺的OpenGL程式的工具包,比aux功能強大。擴充套件函式庫是硬體廠商為實現硬體更新利用OpenGL的擴充套件機制開發的函式。下面逐一對這些庫進行詳細介紹。 1.OpenGL核心庫- 繪製基本幾何圖元的函式:glBegain()、glEnd()、glNormal*()、glVertex*();
- 矩陣操作、幾何變換和投影變換的函式:如矩陣入棧函式glPushMatrix(),矩陣出棧函式glPopMatrix(),裝載矩陣函式glLoadMatrix(),矩陣相乘函式glMultMatrix(),當前矩陣函式glMatrixMode()和矩陣標準化函式glLoadIdentity(),幾何變換函式glTranslate*()、glRotate*()和glScale*(),投影變換函式glOrtho()、glFrustum()和視口變換函式glViewport();
- 顏色、光照和材質的函式:如設定顏色模式函式glColor*()、glIndex*(),設定光照效果的函式glLight*() 、glLightModel*()和設定材質效果函式glMaterial();
- 顯示列表函式:主要有建立、結束、生成、刪除和呼叫顯示列表的函式glNewList()、glEndList()、glGenLists()、glCallList()和glDeleteLists();
- 紋理對映函式:主要有一維紋理函式glTexImage1D()、二維紋理函式glTexImage2D()、設定紋理引數、紋理環境和紋理座標的函式glTexParameter*()、glTexEnv*()和glTetCoord*();
- 特殊效果函式:融合函式glBlendFunc()、反走樣函式glHint()和霧化效果glFog*();
- 光柵化、象素操作函式:如象素位置glRasterPos*()、線型寬度glLineWidth()、多邊形繪製模式glPolygonMode(),讀取象素glReadPixel()、複製象素glCopyPixel();
- 選擇與反饋函式:主要有渲染模式glRenderMode()、選擇緩衝區glSelectBuffer()和反饋緩衝區glFeedbackBuffer();
- 曲線與曲面的繪製函式:生成曲線或曲面的函式glMap*()、glMapGrid*(),求值器的函式glEvalCoord*() glEvalMesh*();
- 狀態設定與查詢函式:glGet*()、glEnable()、glGetError()。
- 輔助紋理貼圖函式:gluScaleImage() 、gluBuild1Dmipmaps()、gluBuild2Dmipmaps();
- 座標轉換和投影變換函式:定義投影方式函式gluPerspective()、gluOrtho2D() 、gluLookAt(),拾取投影視景體函式gluPickMatrix(),投影矩陣計算gluProject()和gluUnProject();
- 多邊形鑲嵌工具:gluNewTess()、gluDeleteTess()、gluTessCallback()、gluBeginPolygon()、gluTessVertex()、gluNextContour()、gluEndPolygon();
- 二次曲面繪製工具,主要有繪製球面、錐面、柱面、圓環面gluNewQuadric()、gluSphere()、gluCylinder()、gluDisk()、gluPartialDisk()、gluDeleteQuadric();
- 非均勻有理B樣條繪製工具:主要用來定義和繪製Nurbs曲線和曲面,包括gluNewNurbsRenderer()、gluNurbsCurve()、gluBeginSurface()、gluEndSurface()、gluBeginCurve()、gluNurbsProperty();
- 錯誤反饋工具:獲取出錯資訊的字串gluErrorString()。
- 視窗初始化和退出函式:auxInitDisplayMode()和auxInitPosition();
- 視窗處理和時間輸入函式:auxReshapeFunc()、auxKeyFunc()和auxMouseFunc();
- 顏色索引裝入函式:auxSetOneColor();
- 三維物體繪製函式:包括了兩種形式網狀體和實心體,如繪製立方體auxWireCube()和 auxSolidCube()。這裡以網狀體為例,長方體auxWireBox()、環形圓紋面auxWireTorus()、圓柱auxWireCylinder()、二十面體auxWireIcosahedron()、八面體auxWireOctahedron()、四面體auxWireTetrahedron()、十二面體auxWireDodecahedron()、圓錐體auxWireCone()和茶壺auxWireTeapot();
- 背景過程管理函式:auxIdleFunc();
- 程式執行函式:auxMainLoop()。
- 視窗操作函式:視窗初始化、視窗大小、視窗位置函式等[glutInit()、glutInitDisplayMode()、glutInitWindowSize()、glutInitWindowPosition()];
- 回撥函式:響應重新整理訊息、鍵盤訊息、滑鼠訊息、定時器函式[GlutDisplayFunc()、glutPostRedisplay()、glutReshapeFunc()、glutTimerFunc()、glutKeyboardFunc()、glutMouseFunc()];
- 建立複雜的三維物體:這些和aux庫的函式功能相同;
- 選單函式:建立新增選單的函式GlutCreateMenu()、glutSetMenu()、glutAddMenuEntry()、glutAddSubMenu()和glutAttachMenu();
- 程式執行函式:glutMainLoop()。
- 繪圖上下文相關函式:wglCreateContext()、wglDeleteContext()、wglGetCurrentContent()、wglGetCurrentDC()、wglDeleteContent();
- 文字和文字處理函式:wglUseFontBitmaps()、wglUseFontOutlines();
- 覆蓋層、地層和主平面層處理函式:wglCopyContext()、wglCreateLayerPlane()、wglDescribeLayerPlane()、wglReakizeLayerPlatte();
- 其他函式:wglShareLists()、wglGetProcAddress()。
- 初始化:glXQueryExtension();
- 渲染上下文函式:glXCreateContext()、glXDestroyContext()、glXCopyContext()、glXMakeCurrent()、glXCreateGLXPixmap();
- 執行:glXWaitGL()、glXWaitX();
- 緩衝區和字型:glXSwapBuffers()、glXUseXFont()。
下面給出OpenGL官方規定的
命名規則:
-
ARB
– OpenGL Architecture Review Board正式核準的擴充套件,往往由廠商開發的擴充套件發展而來,如果同時存在廠商開發的擴充套件和ARB擴充套件,應該優先使用ARB擴充套件; - EXT – 多家OpenGL廠商同意支援的擴充套件;
-
HP
– Hewlett-Packard 惠普; -
IBM
– International Business Machines ; -
KTX
– Kinetix, maker of 3D Studio Max ; -
INTEL
– Intel 公司; -
NV
– NVIDIA 公司; - MESA – Brian Paul’s freeware portable OpenGL implementation ;
-
SGI
– Silicon Graphics公司開發的擴充套件; - SGIX – Silicon Graphics (experimental) 公司開發的實驗性擴充套件;
- SUN – Sun Microsystems;
-
WIN
– Microsoft 。