1. 程式人生 > >opengl 實體和網格繪圖函式(基礎)

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

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軸的縮放比例

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

舉個建立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);
//


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);

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

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 實體網格繪圖函式基礎

void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);  絲狀球 void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks); 實心球void glutWire

mysql中的單行函式多行函式講義

--查詢工作為SALESMAN,MANAGER並且工資大於2500的員工資訊 --and關鍵字的執行級別高於or --可以使用小括號提升條件的執行級別,使用了小括號的級別是最高的 select * from emp where (job='SALESMAN' or j

C/S程式的一般流程基本socket函式

一、基於TCP協議的網路程式 伺服器呼叫socket()、bind()、listen()完成初始化後,呼叫accept()阻塞等待,處於監聽埠的狀態,客戶端呼叫socket()初始化後,呼叫connect()發出SYN段並阻塞等待伺服器應答,伺服器應答一個SYN-AC

UINCODE字串安全字串函式

字符集基礎知識 在計算機中,字元都是以二進位制編碼方式存在於儲存中 編碼與解碼 將字元輸入計算機儲存的過程類似於一個”編碼”的過程 而將對應的”編碼”顯示出來的過程類似於一個解碼的過程 二進位制值本身代表什麼含義是可以隨意定義的,在記憶體中用某個2進位制的值代表某一

oracle逐步學習總結之oracle數字函式日期函式基礎

  原創作品,轉自請註明出處:https://www.cnblogs.com/sunshine5683/p/10140716.html 繼上篇總結,繼續進行總結: 以下下數字函式: 1、abs(n):返回數字n的絕對值 2、acos(n):返回數字的反餘弦值 3、asin(n):返回數字

蛇形填數蛇形取數基礎模擬練習

code 練習 color 順序 printf urn pri int 蛇形填數 1 /* 2 問題 輸入矩陣的規模n,先將數按照下,右,上,左的順序填入矩陣,再按照這樣的順序取出。 3 解題思路 模擬,按照筆的順序存入取出,註意初始化的時候一定將矩陣全部初始化。

函式常用模組【day04】:內建函式

一、36-40 36、isinstance(object, classinfo) 功能:用於判斷,物件是否是某個類的例項 # s = "alex" # 物件,"alex" => str s = [11,11,11] # 用於判斷,物件是否是某個類的例項 r = isinsta

Unity NavMesh尋路檢測的bug或者特性,爬坡卡住問題。(角色高度網格高度不一致造成

Unity專案,由於人物移動時一般用搖桿或者方向鍵控制, 需要有八方向方式控制朝向,  所以沒有用 NavMesh Agent, 而是自己控制人物方向移動,然後貼合地面。 用了NavMesh.CalculatePath只是用於目標點的尋路, 尋找出路經後自己計算實現移動。

蔡高廳老師 - 高等數學閱讀筆記 - 14 定積分 -定積分的換元法 - 廣義積分伽馬函式65、66

不定積分有第一,第二換元,定積分只有換元: 周期函式的定積分 定積分的分部積分法 利用歸納法和分部積分法

mysql儲存過程函式

  儲存過程和函式是事先經過編譯並存儲在資料庫的一段sql語句集合,呼叫儲存過程和函式可以簡化應用程式開發人員的很多工作,減少資料在資料庫和應用伺服器之間的傳輸,對提高資料執行效率是有好處的。   儲存過程和函式的區別在於函式必須有返回值,而儲存過程卻沒有,儲存過程的引數可以使用IN,OUT,INOUT型別

Go程式設計基礎函式func

https://blog.csdn.net/qq_22063697/article/details/74858264 函式是基本的程式碼塊,用於執行一個任務,是構成程式碼執行的邏輯結構。 在Go語言中,函式的基本組成為:關鍵字func、函式名、引數列表、返回值、函式體和返回語句。 函

Cris 的 Python 資料分析筆記 03:NumPy 矩陣運算常用函式重點

03. 矩陣運算和常用函式(重點) 文章目錄 03. 矩陣運算和常用函式(重點) 1. numpy 矩陣判斷和計算 1.1 與運算 1.2 或運算 1.3 或運算作為矩陣索引賦值

c++虛擬函式override過載函式overload的比較

1. 過載函式要求函式有相同的函式名稱,並有不同的引數序列;而虛擬函式則要求完全相同; 2. 過載函式可以是成員函式或友元函式,而虛擬函式只能是成員函式; 3. 過載函式的呼叫是以所傳遞引數的差別作為呼叫不同函式的依據,虛擬函式是根據物件動態型別的不同去呼叫不同

Spark Streaming狀態管理函式——updateStateByKeymapWithState

updateStateByKey和mapWithState   什麼是狀態管理函式   updateStateByKey   mapWithState   updateStateByKey和mapWithState的區別   適用場景 什麼是狀態管理函

PHP統計字串長度切割字串函式解決亂碼問題,切割中文問題

統計字串長度函式:mb_strlen('要統計的字串','字符集(utf-8)');           例項:$a = ‘12測試測試測試測試測試1231l’;           &nbs

C語言字串處理基礎函式

1.strlen()函式 功能:函式返回字串str 的長度( 即空值結束符之前字元數目,不包括控制結束符)。 語法: #include <string.h> size_t strlen( char *str ); 例子: #include <stdio

函式--函式基礎

一、 函式的分類 #1、內建函式 為了方便我們的開發,針對一些簡單的功能,python直譯器已經為我們定義好了的函式即內建函式。對於內建函式,我們可以拿來就用而無需事先定義,如len(),sum(),max() ps:我們將會在最後詳細介紹常用的內建函式。 #2、自定義函式 很明顯內建函式

python 基礎函式

一. 知識倉庫 預設引數的陷阱:如果預設引數的值是一個可變資料型別,那麼每次呼叫的時候不傳值,就公用這個資料型別的資源 函式的名稱空間 1、內建名稱空間: - python直譯器一啟動就將可以使用的名字儲存在內建名稱空間中,內建的名字(如print、input

檔案相關的函式

之前整理了常見的一些和檔案相關的函式,今天再補充幾個和檔案相關的函式: feof() feof()是一個c語言函式,既可用以判斷二進位制檔案又可用以判斷文字檔案。用來檢測檔案結束,函式原型為: int feof(FILE *stream); 如果檔案結束,則返回

實體記憶體虛擬記憶體相輔相成同時

概念: 實體記憶體,即計算機上的記憶體條的大小。 虛擬記憶體,顧名思義,虛擬的,不是真實的記憶體,即勻出一部分硬碟空間來充當記憶體使用。 當運用程式需要用到記憶體時,一部分記憶體儲存在實體記憶體,一部分暫時不需要用到的資料儲存在虛擬記憶體。 下面這段話容易理解: