OpenGL基本API概述

openkk 12年前發布 | 70K 次閱讀 OpenGL 圖形/圖像處理

OpenGL中的gl庫是核心庫,glu是實用庫,glut是實用工具庫。 gl是核心,glu是對gl的部分封裝,glut是OpenGL的跨平臺工具庫。 gl中包含了最基本的3D函數,而glu似乎對gl的輔助,如果數學功底好,在不用glu的情況下,也是可以做出同樣的效果。glut是基本的窗口界面, 是獨立于gl和glu的,如果不喜歡用glut可以用MFC和Win32窗口等代替;但是glut是跨平臺的,這就保證了我們編出的程序是跨平臺的;如果用MFC或者Win32只能在windows操作系統上使用。選擇OpenGL的一個很大原因就是因為它的跨平臺性,所以我們可以盡量的使用glut庫。
O</strong></span>penGL實用庫:43個函數(以glu開頭,包括紋理映射、坐標變換、多邊形分化、繪制一些如橢球、圓柱、茶壺等簡單多邊形實體)。
OopenGL輔助庫:31個函數(以aux 開頭 openGL函數庫相關的API有核心庫(gl)、實用庫(glu)、輔助庫(aux)、實用工具庫(glut)、窗口庫(glx、agl、wgl)和擴展函數庫等)。

①OpenGL核心庫

       核心庫包含有115個函數,函數名的前綴為gl。這部分函數用于常規的、核心的圖形處理.此函數由gl.dll來負責解釋執行.核心庫中的函數主要可以分為以下幾類函數。

繪制基本幾何圖元的函數
如繪制圖元的函數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()

②OpenGL實用庫The OpenGL Utility Library (GLU)

        包含有43個函數,函數名的前綴為glu.OpenGL提供了強大的但是為數不多的繪圖命令,所有較復雜的繪圖都必須從點、線、面開.Glu 為了減輕繁重的編程工作,封裝了OpenGL函數,Glu函數通過調用核心庫的函數,為開發者提供相對簡單的用法,實現一些較為復雜的操作.此函數由glu.dll來負責解釋執行OpenGL中的核心庫和實用庫可以在所有的OpenGL平臺上運行.主要包括了以下幾種.

輔助紋理貼圖函數
gluScaleImage() 、gluBuild1Dmipmaps()gluBuild2Dmipmaps()
坐標轉換和投影變換函數
定義投影方式函數gluPerspective()gluOrtho2D()gluLookAt(),拾取投影視景體函數gluPickMatrix(),投影矩陣計算gluProject()和 gluUnProject()等等。
多邊形鑲嵌工具
gluNewTess()、 gluDeleteTess()、 gluTessCallback()、 gluBeginPolygon()、 uTessVertex()gluNextContour()、 gluEndPolygon()等等
二次曲面繪制工具
主要有繪制球面、錐面、柱面、圓環面 gluNewQuadric()、 gluSphere()、 gluCylinder()、 gluDisk()gluPartialDisk()、 gluDeleteQuadric()等等
非均勻有理B樣條繪制工具
主要用來定義和繪制Nurbs曲線和曲面,包括gluNewNurbsRenderer()gluNurbsCurve()gluBeginSurface()gluEndSurface()gluBeginCurve()gluNurbsProperty()等函數
錯誤反饋工具
獲取出錯信息的字符串gluErrorString()

③OpenGL輔助庫 包含有31個函數,函數名前綴為aux

       這部分函數提供窗口管理、輸入輸出處理以及繪制一些簡單三維物體此函數由glaux.dll負責解釋執行創建aux庫是為了學習和編寫OpenGL程序,它更像是一個用于測試創意的預備基礎接管Aux庫在windows實現有很多錯誤,因此很容易導致頻繁的崩潰在跨平臺的編程實例和演示中,aux很大程度上已經被glut庫取代OpenGL中的輔助庫不能在所有的OpenGL平臺上運行。
輔助庫函數主要包括以下幾類:
窗口初始化和退出函數auxInitDisplayMode()auxInitPosition()
窗口處理和時間輸入函數auxReshapeFunc()auxKeyFunc()auxMouseFunc()
顏色索引裝入函數auxSetOneColor()
三維物體繪制函數
包括兩種形式網狀體和實心體,如繪制立方體auxWireCube()auxSolidCube()。這里以網狀體為例,長方體auxWireBox()、環形圓紋面 auxWireTorus()、 圓柱auxWireCylinder()、二十面體auxWireIcosahedron()、八面體auxWireOctahedron()、四面體 auxWireTetrahedron()、十二面體auxWireDodecahedron()、圓錐體auxWireCone()和茶壺auxWireTeapot()
背景過程管理函數auxIdleFunc()
程序運行函數auxMainLoop()

④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圖形代碼,然后再集成為完整的應用程序.這部分函數主要包括如下:
窗口操作函數
窗口初始化、大小、位置等函數glutInit()glutInitDisplayMode()glutInitWindowSize()glutInitWindowPosition()
回調函數
響應刷新消息、鍵盤消息、鼠標消息、定時器函數等:GlutDisplayFunc()glutPostRedisplay()glutReshapeFunc()glutTimerFunc()glutKeyboardFunc()glutMouseFunc()
創建復雜的三維物體
這些和aux庫的函數功能相同.創建網狀體和實心體.如glutSolidSphere()glutWireSphere()
菜單函數
創建添加菜單的函數GlutCreateMenu()glutSetMenu()glutAddMenuEntry()glutAddSubMenu()glutAttachMenu()

程序運行函數glutMainLoop()

本文信息資源來源于網絡,歡迎轉載!轉載時請保留本文鏈接(http://www.shopliyang.com.cn/)!

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!