[轉]OpenGL庫介紹

原帖地址:http://blog.csdn.net/yyyuhan/archive/2008/01/15/2045009.aspx

  開發基于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核心庫

  核心庫包含有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庫的函數功能相同;
  ◇ 菜單函數:創建添加菜單的函數GlutCreateMenu()、glutSetMenu()、glutAddMenuEntry()、glutAddSubMenu()和glutAttachMenu();
  ◇ 程序運行函數:glutMainLoop()。

5.Windows專用庫

  針對windows平臺的擴展,包含有16個函數,函數名前綴為wgl。這部分函數主要用于連接OpenGL和Windows ,以彌補OpenGL在文本方面的不足。?? Windows專用庫只能用于Windows環境中。

  這類函數主要包括以下幾類:

  ◇ 繪圖上下文相關函數:wglCreateContext()、wglDeleteContext()、wglGetCurrentContent()、wglGetCurrentDC()、wglDeleteContent();
  ◇ 文字和文本處理函數:wglUseFontBitmaps()、wglUseFontOutlines();
  ◇ 覆蓋層、地層和主平面層處理函數:wglCopyContext()、wglCreateLayerPlane()、wglDescribeLayerPlane()、wglReakizeLayerPlatte();
  ◇ 其他函數:wglShareLists()、wglGetProcAddress()。

6.Win32 API函數庫

  包含有6個函數,函數名無專用前綴,是win32擴展函數。這部分函數主要用于處理像素存儲格式和雙幀緩存;這6個函數將替換Windows GDI中原有的同樣的函數。Win32API函數庫只能用于Windows 95/98/NT環境中。

7.X窗口專用庫

  是針對Unix和Linux的擴展函數。包括渲染上下文、繪制圖元、顯示列表、紋理貼圖等;

  ◇ 初始化:glXQueryExtension();
  ◇ 渲染上下文函數:glXCreateContext()、glXDestroyContext()、glXCopyContext()、glXMakeCurrent()、glXCreateGLXPixmap();
  ◇ 執行:glXWaitGL()、glXWaitX();
  ◇ 緩沖區和字體:glXSwapBuffers()、glXUseXFont()。

8.其他擴展庫

  這些函數可能是新的OpenGL函數,并沒有在標準OpenGL庫中實現,或者它們是用來擴展已存在的OpenGL函數的功能。和glu、 glx和wgl一樣,這些OpenGL擴展是由硬件廠商和廠商組織開發的。OpenGL擴展(OpenGL Extention)包含了大量的擴展API函數。

  隨著硬件的更新,硬件廠商首先向SGI申請登記新的擴展,編寫規格說明書(specification)。然后按照說明書進行開發擴展程序。不 同的OpenGL實現(OpenGL Implementation)支持的擴展可能不一樣,只有隨著某一擴展的推廣與應用以及硬件技術的提高該擴展才會在所有的OpenGL實現中被給予支 持,從而最終成為OpenGL標準庫的一部分。擴展由SGI維護,在SGI網站上列出了目前公開的已注冊的擴展及其官方說明書。擴展源由擴展函數的后綴來 指明(或使用擴展常量后綴)。例如,后綴WIN表明一個符合Windows規范的擴展,EXT或ARB后綴表明該擴展由多個賣主定義。

轉載于:https://www.cnblogs.com/dad-bod/p/5500337.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255278.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255278.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255278.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL Server優化50法

查詢速度慢的原因很多&#xff0c;常見如下幾種&#xff1a; 1、沒有索引或者沒有用到索引(這是查詢慢最常見的問題&#xff0c;是程序設計的缺陷) 2、I/O吞吐量小&#xff0c;形成了瓶頸效應。 3、沒有創建計算列導致查詢不優化。 4、內存不足 5、網絡速度慢 …

HALCON示例程序check_fish_stick_dimension.hdev生魚棒尺寸測量;基于形態學的像素級精度尺寸測量

HALCON示例程序check_fish_stick_dimension.hdev基于形態學的像素級精度尺寸測量 示例程序源碼&#xff08;加注釋&#xff09; 關閉實時顯示更新 dev_update_off () 關閉窗口 dev_close_window () 讀入圖片 read_image (Image, ‘food/fish_sticks_raw_01’) 根據給定長寬…

單片機平臺的最小偏差圓弧插補算法

在CNC機床的G代碼中&#xff0c;最常見的有G0、G1、G2、G3代碼&#xff0c;分別表示直線和圓弧插補&#xff0c;直線插補對于單片機來說&#xff0c;比較容易實現&#xff0c;只需要將位移增量轉換為脈沖增量然后輸出給步進電機就可以了&#xff0c;但對于圓弧插補&#xff0c;…

javascript基礎--數組排序

字符串的排序 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>數組排序</title><script>var arr [fliar, asdf, dfe, loii, yhhl];arr.sort();alert(arr);</script> </head>&…

【轉】JS跨域(ajax跨域、iframe跨域)解決方法及原理詳解(jsonp)

這里說的js跨域是指通過js在不同的域之間進行數據傳輸或通信&#xff0c;比如用ajax向一個不同的域請求數據&#xff0c;或者通過js獲取頁面中不同域的框架中(iframe)的數據。只要協議、域名、端口有任何一個不同&#xff0c;都被當作是不同的域。 下表給出了相對http://store.…

Lua基本語法-lua與C#的交互(相當簡單詳細的例子)

lua腳本 與 C#的交互 本文提供全流程&#xff0c;中文翻譯。Chinar堅持將簡單的生活方式&#xff0c;帶給世人&#xff01;&#xff08;擁有更好的閱讀體驗 —— 高分辨率用戶請根據需求調整網頁縮放比例&#xff09; 1Lua And C# —— Lua 和 C#的交互準備工作 2C# Create Lu…

漫談程序員系列:千奇百怪的程序員

干開發時間長了&#xff0c;遇見好多好玩兒的程序員。 看看你躺槍了沒。 博客之星評選&#xff0c;點擊投我一票&#xff0c;謝謝。投過了也可以點哦&#xff0c;每天都可以投投一票。 留一手 有個哥們兒&#xff0c;在一合資公司做程序員&#xff0c;能力挺強&#xff0c;寫…

HALCON示例程序check_hazelnut_wafers.hdev威化餅干質量檢測(完整與否,是否破碎)

HALCON示例程序check_hazelnut_wafers.hdev威化餅干質量檢測&#xff08;完整與否&#xff0c;是否破碎&#xff09; 示例程序源碼&#xff08;加注釋&#xff09; 讀入圖片 read_image (Image, ‘food/hazelnut_wafer_01’) 關閉窗口 dev_close_window () 根據給定的長寬比…

Windows Media Center .MCL文件代碼執行漏洞(MS16-059)

blast 2016/06/21 13:180x00 簡介漏洞作者EduardoBraun Prado在今年早期發現了WMP的.MCL文件又存在一個可以導致遠程代碼執行的漏洞。為什么要說又呢&#xff0c;因為這個東西實在是“不爭氣”&#xff0c;同一個地方出現了多次繞過導致遠程代碼執行的問題。0x01 歷史A――MS1…

SCARA機器人與 DELTA機器人

1、SCARA機器人SCARA&#xff08;Selective Compliance Assembly Robot Arm&#xff0c;中文譯名&#xff1a;選擇順應性裝配機器手臂&#xff09;是一種圓柱坐標型的特殊類型的工業機器人。1978年&#xff0c;日本山梨大學牧野洋發明SCARA&#xff0c;該機器人具有四個軸和四個…

一直以來都沒直視的輪播-_-

一直以來做項目碰到輪播圖我都是去網站上找現成插件拿來用&#xff0c;現成的插件1是省時間&#xff0c;拿來改改尺寸改改參數就能直接用&#xff0c;2是現在的插件確實很強大&#xff0c;對于我一個剛剛學習前端的人來說&#xff0c;牛人寫的輪播我看懂也要花些功夫&#xff0…

HALCON示例程序circles.hdev邊界輪廓的圓形擬合

HALCON示例程序circles.hdev邊界輪廓的圓形擬合 小哥哥小姐姐覺得有用點個贊唄&#xff01; 示例程序源碼&#xff08;加注釋&#xff09; 讀入圖片 read_image (Image, ‘double_circle’)窗口初始化 dev_close_window () get_image_size (Image, Width, Height) dev_open…

asp.net 微信企業號辦公系統-流程設計--保存與發布

如果流程未設計完時可以先保存&#xff0c;以后再打開接著設計。點擊工具欄上的保存按鈕即可保存當前流程設計: 如果下次要接著設計&#xff0c;則可以打開該流程繼續設計&#xff1a; 如果流程設計完成&#xff0c;可以點擊安裝按鈕來發布流程&#xff0c;流程安裝成功后即加入…

search-guard 在 Elasticsearch 2.3 上的運用

uni3orns 2016/06/23 11:09Author&#xff1a;uni3orns參考內容&#xff1a;kibana.logstash.es/content/ela…groups.google.com/forum/#!for…github.com/floragunnco…此文章基于以下軟件版本&#xff0c;不同版本可能略有差異&#xff1a;elasticsearch 2.3.3search-guard…

HALCON示例程序class_2dim_sup.hdev使用二維像素分類對圖像進行分割

HALCON示例程序class_2dim_sup.hdev使用二維像素分類對圖像進行分割 示例程序源碼&#xff08;加注釋&#xff09; 定義Interactive并賦值&#xff0c;0&#xff1a;固定框&#xff1b;1&#xff1a;手工繪制框。 Interactive : 0 讀入圖片 read_image (Image, ‘ic’) 關閉…

sys

sys.argv 命令行參數List&#xff0c;第一個元素是程序本身路徑 sys.exit(n) 退出程序&#xff0c;正常退出時exit(0) sys.version 獲取Python解釋程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模塊的搜索路徑&#xff0c;初…

修改環境變量

在path變量后添加&#xff0c;對變量長度無限制&#xff0c;需要重啟后生效reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%path%;c:\newpath;whatever" /freg save "HKLM\SYSTEM\CurrentCont…

Canny邊緣檢測算法原理及其VC實現詳解(二)

3、 Canny算法的實現流程 由于本文主要目的在于學習和實現算法&#xff0c;而對于圖像讀取、視頻獲取等內容不進行闡述。因此選用OpenCV算法庫作為其他功能的實現途徑&#xff08;關于OpenCV的使用&#xff0c;作者將另文表述&#xff09;。首先展現本文將要處理的彩色圖片。 …

IDEA注冊jar包使用和常用插件

IDEA注冊jar包使用 點擊獲取下載地址或生成注冊碼 一、安裝完成后&#xff0c;先不啟動&#xff0c;首先如下圖修改相關的地方。 二、啟動IDEA&#xff0c;并且激活IDEA IDEA插件倉庫 IntelliJ IDEA Plugins 一、Maven Helper 我一般用這款插件來查看maven的依賴樹。在不使用此…

HALCON示例程序class_2dim_unsup.hdev基于二維直方圖的聚類分類

HALCON示例程序class_2dim_unsup.hdev基于二維直方圖聚類分類的顏色分類 示例程序源碼&#xff08;加注釋&#xff09; 讀入圖片 read_image (Image, ‘patras’)關閉窗口 dev_close_window ()得到圖片尺寸大小 get_image_size (Image, Width, Height)打開窗口 dev_open_wind…