opengl 實體和網格繪圖函數(基礎)(轉)

http://blog.csdn.net/he_wen_jian/article/details/8594880程序員

GLUT工具箱提供幾種圖形3維圖形的函數:編程

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); 實心茶壺

若是須要用到長方體那就用glScalef(x,y,z); 作本身想要的長方體,這兒的x,y,z分別對應x,y,z軸的縮放比例windows

不過竟然沒有看到圓柱體的函數。在網上搜索很多人說到的都是用一個aux開頭的輔助函數庫。可是這有個很大的缺陷,已經被GLUT庫代替了ide

舉個建立2次對象的簡單例子:
//建立一個半徑爲5,在經線和緯線方向細分數爲10的球體
GLUquadricObj *pobj;
pobj=gluNewQuadric();
gluQuadricDrawStyle(pobj,GLU_LINE);//肯定幾何體的繪製模式(GLU_LINE)
gluSphere(pobj,5,10,10);建立圓環盤,innerRadius,outerRadius分別指定了內徑和外徑建立圓柱體建立球體函數


下面是幾個用於建立簡單的2次曲面的GLU函數:
GLUquadricObj* gluNewQuadric();
//建立一個新的2次曲面對象,並返回一個指向該對象的指針
void gluDeleteQuadric(GLUquadricObj*);
//刪除又2次對象指針指定的2次曲面工具


void gluSphere(GLUquadricObj* pobj,GLdouble radius,GLint silces,GLint stacks);
//oop


void gluCylinder(GLUquadricObj* pobj,GLdouble baseRadius,GLdouble topRadius,GLint slices,GLint stacks);
//學習


void gluDisk(GLUquadricObj* pobj,GLdouble innerRadius,GLdouble outerRadius,GLint slices,GLint stacks);
//測試

 


下面幾個是建立GLUT對象的函數,是對GLU的補充
void glutWireSphere(GLdouble radius,GLint slices,GLint stacks);
//建立線框球體
void glutSolidSphere(GLdouble radius,GLint slices,GLint stacks);
//建立實心球體
void glutWireCone(GLdouble baseRadius,GLdouble height,GLint slices,GLint stacks);
void glutSolidCone(GLdouble baseRadius,GLdouble height,GLint slices,GLint stacks);
void glutWireTorus(GLdouble innerRadius,GLdouble outerRadius,GLint slices,GLint stacks);
void glutSolidTorus(GLdouble innerRadius,GLdouble outerRadius,GLint slices,GLint stacks);

仔細搜索了一下,找到了比較詳細的介紹ui

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()。
相關文章
相關標籤/搜索