OpenGL中gl,glu,glut的區別

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庫。
opengl 實用庫 : 43個函數,以glu開頭,包括紋理映射、座標變換、多邊形分化、繪製一些如橢球、圓柱、茶壺等簡單多邊形實體 部分函數象核心函數一樣在任何OpenGL平臺都可以應用。
opengl輔助庫: 31個函數,以aux 開頭,
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多個。核心庫中的函數主要可以分爲以下幾類函數。
繪製基本幾何圖元的函數。如繪製圖元的函數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()等。
2. 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() gluTessVertex()、gluNextContour()、gluEndPolygon()等等。
二次曲面繪製工具,主要有繪製球面、錐面、柱面、圓環面gluNewQuadric()、gluSphere()、gluCylinder()、gluDisk()、gluPartialDisk()、gluDeleteQuadric()等等。
非均勻有理B樣條繪製工具,主要用來定義和繪製Nurbs曲線和曲面,包括gluNewNurbsRenderer()、 gluNurbsCurve()、gluBeginSurface()、gluEndSurface()、gluBeginCurve()、 gluNurbsProperty()等函數。
錯誤反饋工具,獲取出錯信息的字符串gluErrorString().
3. 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()。
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圖形代碼,然後再集成爲 完整的應用程序。
這部分函數主要包括
窗口操作函數,窗口初始化、窗口大小、窗口位置等函數glutInit() glutInitDisplayMode() glutInitWindowSize() glutInitWindowPosition()等。
回調函數。響應刷新消息、鍵盤消息、鼠標消息、定時器函數等,GlutDisplayFunc() glutPostRedisplay() glutReshapeFunc() glutTimerFunc() glutKeyboardFunc() glutMouseFunc()。
創建複雜的三維物體。這些和aux庫的函數功能相同。創建網狀體和實心體。如glutSolidSphere()、glutWireSphere()等。在此不再敘述。
菜單函數。創建添加菜單的函數GlutCreateMenu()、glutSetMenu()、glutAddMenuEntry()、glutAddSubMenu() 和glutAttachMenu()。
程序運行函數,glutMainLoop()。

OPENGL中GLU和GLUT工具箱收藏
GLUT工具箱提供幾種圖形3維圖形的函數:
view plaincopy to clipboardprint?
void glutWireSphere(GLdouble radius, GLint slices, GLint stacks); 絲狀球
void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks); 實心球
void glutWireCube(GLdouble size); 絲狀立方體
void glutSolidCube(GLdouble size); 實心立方體
void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius,
GLint nsides, GLint rings); 絲狀花環
void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius,
GLint nsides, GLint rings); 實心花環
void glutWireIcosahedron(void); 絲狀20面體
void glutSolidIcosahedron(void); 實心20面體
void glutWireOctahedron(void); 絲狀8面體
void glutSolidOctahedron(void); 實心8面體
void glutWireTetrahedron(void); 絲狀4面體
void glutSolidTetrahedron(void); 實心4面體
void glutWireDodecahedron(GLdouble radius); 絲狀12面體
void glutSolidDodecahedron(GLdouble radius); 實心12面體
void glutWireCone(GLdouble radius, GLdouble height, GLint slices,
GLint stacks); 絲狀圓錐體
void glutSolidCone(GLdouble radius, GLdouble height, GLint slices,
GLint stacks); 實心圓錐體
void glutWireTeapot(GLdouble size); 絲狀茶壺
void glutSolidTeapot(GLdouble size); 實心茶壺
void glutWireSphere(GLdouble radius, GLint slices, GLint stacks); 絲狀球
void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks); 實心球
void glutWireCube(GLdouble size); 絲狀立方體
void glutSolidCube(GLdouble size); 實心立方體
void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius,
GLint nsides, GLint rings); 絲狀花環
void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius,
GLint nsides, GLint rings); 實心花環
void glutWireIcosahedron(void); 絲狀20面體
void glutSolidIcosahedron(void); 實心20面體
void glutWireOctahedron(void); 絲狀8面體
void glutSolidOctahedron(void); 實心8面體
void glutWireTetrahedron(void); 絲狀4面體
void glutSolidTetrahedron(void); 實心4面體
void glutWireDodecahedron(GLdouble radius); 絲狀12面體
void glutSolidDodecahedron(GLdouble radius); 實心12面體
void glutWireCone(GLdouble radius, GLdouble height, GLint slices,
GLint stacks); 絲狀圓錐體
void glutSolidCone(GLdouble radius, GLdouble height, GLint slices,
GLint stacks); 實心圓錐體
void glutWireTeapot(GLdouble size); 絲狀茶壺
void glutSolidTeapot(GLdouble size); 實心茶壺

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/dayeshisir/archive/2010/05/16/5597057.aspx
gl 庫

繪製幾何圖形

glVertex
glVertexPointer
glArrayElement
glBegin , glEnd
glEdgeFlag , glEdgeFlagv
glPointSize
glLineWidth
glLineStipple
glPolygonMode
glFrontFace
glPolygonStipple
glDrawElements
glRect

座標轉換

glTranslate
glRotate
glScale
glViewPoint
glFrustum
glOrtho
glClipPlane

堆棧操作

glLoadMatrix
glMultMatrix
glMatrixMode
glPushMatrix , glPopMatrix
glPushAttrib , glPopAttrib
glPushName , glPopName
glInitName
glLoadName

顯示列表

glNewList , glEndList
glCallList
glCallLists
glGenLists
glDeleteLists
glIsList

使用光照和材質

glNormal
glNormalPointer
glLight
glLightModel
glMaterial
glColorMaterial

像素操作

glRasterPos
glBitmap
glReadPixels
glDrawPixels
glCopyPixels
glCopyTexImage1D
glCopyTexImage2D
glCopyTexSubImage1D
glCopyTexSubImage2D
glPixelZoom
glPixelStore
glPixelTransfer
glPixelMap

紋理映射

glTexImage1D
glTexImage2D
glTexParameter
glTexSubImage1D
glTexSubImage2D
glTexEnv
glTexCoord
glTexGen
glTexCoordPointer
glDeleteTextures

特效操作

glBlendFunc
glHint
glFog

幀緩存操作

glClear
glClearAccum
glClearColor
glClearDepth
glClearIndex
glClearStencil
glDrawBuffer
glIndexMask
glColorMask
glDepthMask
glStencilMask
glAlphaFunc
glStencilFunc
glStencilOp
glDepthFunc
glDepthRange
glLogicOp
glAccum

曲線或曲面繪製

glEvalCoord
glMap1
glMap2
glMapGrid
glEvalMesh
glEvalPoint

查詢函數

glGet
glGetClipPlane
glGetColorTableEXT
glGetColorTableParameterfvEXT , glGetColorTableParameterivEXT
glGetError
glGetLight
glGetMap
glGetMaterial
glGetPixelMap
glGetPointerv
glGetPolygonStipple
glGetString
glGetTexEnv
glGetTexImage
glGetTexLevelParameter
glGetTexParameter
2.GLU 庫函數

繪製 NURBS 曲線和曲面

gluNewNurbsRenderer
gluNurbsProperty
gluNurbsCallback
gluBeginCurve , gluEndCurve
gluNurbsCurve
gluDeleteNurbsRenderer
gluBeginSurface , gluEndSurface
gluNurbsSurface
gluBeginTrim , gluEndTrim
gluPwlCurve
gluBeginPolygon , gluEndPolygon
gluPickMatrix

繪製二次幾何物體

gluNewQuadric
gluQuadricDrawStyle
gluQuadricNormals
gluQuadricOrientation
gluCylinder
gluSphere
gluDisk
gluPartialDisk
gluDeleteQuadric
gluQuadricTexture
gluQuadricCallback

網格化

gluNewTess
gluTessVertex
gluTessCallback
gluTessBeginPolygon , gluTessEndPolygon
gluTessBeginContour , gluTessBeginContour
gluTessProperty
gluNextContour
gluTessNormal
gluDeleteTess

座標轉換

gluOrtho2D
gluPerspective
gluLookAt
gluProject
gluUnProject

多重映射

gluBuild1DMipmaps
gluBuild2DMipmaps
gluScaleImage

查詢函數

gluErrorString
gluGetNurbsProperty
gluGetString
gluGetTessProperty
3.GLUT 庫函數

初始化和啓動事件處理

glutInit
glutInitWindowPosition
glutInitWindowSize
glutInitDisplayMode
glutMainLoop

窗口管理

glutCreateWindow
glutCreateSubWindow
glutHideWindow
glutShowWindow
glutSetWindowTitle
glutPostRedisplay
glutSwapBuffers
glutFullScreen
glutPositionWindow
glutReshapeWindow
glutSetWindow
glutGetWindow
glutPopWindow
glutPushWindow
glutDestroyWindow
glutIconifyWindow
glutSetCursor

重疊層管理

glutEstablishOverlay
glutUseLayer
glutRemoveOverlay
glutPostOverlayRedisplay
glutShowOverlay
glutHideOverlay

菜單管理

glutCreateMenu
glutAddMenuEntry
glutAddSubMenu
glutAttachMenu
glutGetMenu
glutSetMenu
glutDestroyMenu
glutChangeToMenuEntry
glutChangeToSubMenu
glutRemoveMenuItem
glutDetachMenu

註冊回調函數

glutDisplayFunc
glutReshapeFunc
glutMouseFunc
glutMotionFunc
glutIdleFunc
glutVisibilityFunc
glutKeyboardFunc
glutSpecialFunc
glutOverlayDisplayFunc
glutPassiveMotionFunc
glutEntryFunc
glutSpaceballMotionFunc
glutSpaceballRotateFunc
glutSpaceballButtonFunc
glutButtonBoxFunc
glutDialsFunc
glutTableMotionFunc
glutTableButtonFunc
glutMenuStatusFunc
glutTimerFunc

顏色索引映射表管理

glutSetColor
glutGetColor
glutCopyColormap

狀態檢索

glutGet
glutLayerGet
glutDeviceGet
glutGetModifiers
glutExtensionSupported

字體繪製

glutBitmapCharacter
glutBitmapWidth
glutStrokeCharacter
glutStrokeWidth

幾何圖形繪製

glutSolidSphere , glutWireSphere
glutSolidCube , glutWireCube
glutSolidCone , glutWireCone
glutSolidTorus , glutWireTorus
glutSolidDodecahedron , glutWireDodecahedron
glutSolidOctahedron , glutWireOctahedron
glutSolidTetrahedron , glutWireTetrahedron
glutSolieIcosahedron , glutWireIcosahedron
glutSolidTeapot , glutWireTeapot
void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);

繪製線框球體

void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);

繪製實心球體

參數:
radius:球體的半徑
slices:球體圍繞z軸分割的數目
stacks:球體沿着z軸分割的數目
繪製中心在模型座標原點,半徑爲radius的球體,球體圍繞z軸分割slices次,球體沿着z軸分割stacks次

//*********************************************************************************

void glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);

繪製線框圓錐體

void glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);

繪製實心圓錐體

參數:
radius:圓錐體的半徑
height:圓錐體的高
slices:圓錐體圍繞z軸分割的數目
stacks:圓錐體沿着z軸分割的數目
圓錐體的軸爲z軸方向,它的基底位於z=0的平面內,頂點z=height,圓錐體圍繞z軸分割slices個數目,沿着z軸分割stacks個數目.

//*********************************************************************************

void glutWireCube(GLdouble size);

繪製線框立方體

void glutSolidCube(GLdouble size);

繪製實心立方體

參數:size:立方體的邊長

//*********************************************************************************

void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);

繪製線框圓環

void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);

繪製實心圓環

參數:
innerRadius:圓環的內半徑
outerRadius:圓環的外半徑
nsides:圓環腔的分割數
rings:圓環的環線數

//*********************************************************************************

void glutWireDodecahedron(void);

繪製線框十二面體

void glutSolidDodecahedron(void);

繪製實心十二面體

//*********************************************************************************

void glutWireTeapot(GLdouble size);

繪製線框茶壺

void glutSolidTeapot(GLdouble size);

繪製實心茶壺

參數:size:茶壺的相對大小

//*********************************************************************************

void glutWireOctahedron(void);

繪製線框八面體

void glutSolidOctahedron(void);

繪製實心八面體

//*********************************************************************************

void glutWireTetrahedron(void);

繪製線框四面體

void glutSolidTetrahedron(void);

繪製實心四面體

//*********************************************************************************

void glutWireIcosahedron(void);

繪製線框二十面體

void glutSolidIcosahedron(void);

繪製實心二十面體

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章