OpenGL

OpenGL

OpenGL(英語:Open Graphics Library,譯名:開放圖形庫或者“開放式圖形庫”)是用於渲染2D、3D矢量圖形的跨語言、跨平台的應用程式編程接口(API)。這個接口由近350個不同的函式調用組成,用來從簡單的圖形比特繪製複雜的三維景象。而另一種程式接口系統是僅用於Microsoft Windows上的Direct3D。OpenGL常用於CAD、虛擬實境、科學可視化程式和電子遊戲開發。OpenGL是一個開放的三維圖形軟體包,它獨立於視窗系統和作業系統,以它為基礎開發的應用程式可以十分方便地在各種平台間移植,它具有七大功能:建模[提供基本的點、線、多邊形的繪製函式外,還提供了複雜的三維物體(球、錐、多面體、茶壺等)以及複雜曲線和曲面繪製函式]、變換、顏色模式設定、光照和材質設定、紋理映射、雙快取動畫、點陣圖顯示和圖象增強圖象功能。

基本信息

簡介

OpenGL(英語:OpenGraphicsLibrary,譯名:開放圖形庫或者“開放式圖形庫”)是用於渲染2D3D矢量圖形的跨語言跨平台應用程式編程接口(API)。這個接口由近350個不同的函式調用組成,用來從簡單的圖形比特繪製複雜的三維景象。而另一種程式接口系統是僅用於MicrosoftWindows上的Direct3D。OpenGL常用於CAD虛擬實境、科學可視化程式和電子遊戲開發。

OpenGL的高效實現(利用了圖形加速硬體)存在於Windows,部分UNIX平台和MacOS。這些實現一般由顯示設備廠商提供,而且非常依賴於該廠商提供的硬體。開放原始碼Mesa是一個純基於軟體的圖形API,它的代碼兼容於OpenGL。但是,由於許可證的原因,它只聲稱是一個“非常相似”的API。

OpenGL規範由1992年成立的OpenGL架構評審委員會(ARB)維護。ARB由一些對創建一個統一的、普遍可用的API特別感興趣的公司組成。根據OpenGL官方網站,2002年6月的ARB投票成員包括3Dlabs、AppleComputer、ATITechnologies、DellComputer、Evans&Sutherland、Hewlett-PackardIBMIntelMatroxNVIDIASGISunMicrosystemsMicrosoft曾是創立成員之一,但已於2003年3月退出。

設計

圖形管線
OpenGLOpenGL

OpenGL規範描述了繪製2D和3D圖形的抽象API。儘管這些API可以完全通過軟體實現,但它是為大部分或者全部使用硬體加速而設計的。

OpenGL的API定義了若干可被客戶端程式調用的數,以及一些具名整型常量(例如,常量GL_TEXTURE_2D對應的十進制整數為3553)。雖然這些函式的定義表面上類似於C程式語言,但它們是語言獨立的。因此,OpenGL有許多語言綁定,值得一提的包括:JavaScript綁定的WebGL(基於OpenGLES2.0在Web瀏覽器中的進行3D渲染的API);C綁定的WGL、GLX和CGL;iOS提供的C綁定;Android提供的Java和C綁定。

OpenGL不僅語言無關,而且平台無關。規範隻字未提獲得和管理OpenGL上下文相關的內容,而是將這些作為細節交給底層的視窗系統。出於同樣的原因,OpenGL純粹專注於渲染,而不提供輸入、音頻以及視窗相關的API。

OpenGL是一個不斷進化的API。新版OpenGL規範會定期由KhronosGroup發布,新版本通過擴展API來支持各種新功能。每個版本的細節由KhronosGroup的成員一致決定,包括顯示卡廠商、作業系統設計人員以及類似Mozilla和谷歌的一般性技術公司。

除了核心API要求的功能之外,GPU供應商可以通過擴展的形式提供額外功能。擴展可能會引入新功能和新常量,並且可能放鬆或取消現有的OpenGL函式的限制。然後一個擴展就分成兩部分發布:包含擴展函式原型的頭檔案和作為廠商的設備驅動。供應商使用擴展公開自定義的API而無需獲得其他供應商或KhronosGroup的支持,這大大增加了OpenGL的靈活性。OpenGLRegistry負責所有擴展的收集和定義。

每個擴展都與一個簡短的標識符關係,該標識符基於開發公司的名稱。例如,英偉達(nVidia)的標識符是NV。如果多個供應商同意使用相同的API來實現相同的功能,那么就用EXT標誌符。這種情況更進一步,KhronosGroup的架構評審委員(ArchitectureReviewBoard,ARB)正式批准該擴展,那么這就被稱為一個“標準擴展”,標識符使用ARB。第一個ARB擴展是GL_ARB_multitexture。

OpenGL每個新版本中引入的功能,特別是ARB和EXT類型的擴展,通常由數個被廣泛實現的擴展功能組合而成。

文檔

OpenGL普及的部分原因是其高質量的官方檔案。OpenGL架構評審委員會隨規範一同發布了一系列包含API變化更新的手冊。這些手冊因其封面顏色而眾所周知。

紅寶書

DaveShreiner,GrahamSellers,JohnM.KessenichandBillM.Licea-Kane.2013.OpenGLProgrammingGuide:TheOfficialGuidetoLearningOpenGL,Version4.3(8thEdition).Addison-WesleyProfessional.ISBN978-0321773036.

橙寶書

RandiJ.Rost,BillM.Licea-Kane,DanGinsburg,JohnM.Kessenich,BartholdLichtenbelt,HughMalanandMikeWeiblen.2009.OpenGLShadingLanguage(3rdEdition).Addison-WesleyProfessional.ISBN978-0321637635

相關程式庫

早期的OpenGL版本會一同發布配套的GLU庫,提供一些同時代硬體尚不支持的簡單功能。GLU最後一次更新規格要求是在1998年,對已棄用的OpenGL特性有依賴。

還有幾個庫也創建在OpenGL之上,提供了OpenGL本身沒有的功能:

1.GLFW

2.GLUT

3.GLEWGLEE

特別是,OpenGLPerformer庫——由SGI開發並可以在IRIX、Linux和MicrosoftWindows的一些版本上使用,構建於OpenGL,可以創建實時可視化仿真程式。

當開發者需要使用最新的OpenGL擴展時,他們往往需要使用GLEW庫或者是GLEE庫提供的功能,可以在程式的運行期判斷當前硬體是否支持相關的擴展,防止程式崩潰甚至造成硬體損壞。這類庫利用動態載入技術(dlsym、GetProcAddress等函式)搜尋各種擴展的信息。

上下文與視窗包

OpenGL上下文(英語:OpenGLcontext)的創建過程相當複雜,在不同的作業系統上也需要不同的做法。因此很多遊戲開發和用戶界面庫都提供了自動創建OpenGL上下文的功能,其中包括SDLAllegro、SFML、FLTK、Qt等。也有一些庫是專門用來創建OpenGL視窗的,其中最早的便是GLUT,後被freeglut取代,比較新的也有GLFW可以使用。

1.以下包可以用來創建並管理OpenGL視窗,也可以管理輸入,但幾乎沒有除此以外的其它功能:

(1)GLFW——跨平台視窗和鍵盤、滑鼠、手柄處理;偏向遊戲

(2)freeglut——跨平台視窗和鍵盤、滑鼠處理;API是GLUTAPI的超集,同時也比GLUT更新、更穩定

(3)GLUT——早期的視窗處理庫,已不再維護

2.支持創建OpenGL視窗的還有一些“多媒體庫”,同時還支持輸入、聲音等類似遊戲的程式所需要的功能:

(1)Allegro5——跨平台多媒體庫,提供針對遊戲開發的CAPI

(2)SDL——跨平台多媒體庫,提供CAPI

(3)SFML——跨平台多媒體庫,提供C++API;同時也提供C#、Java、Haskell、Go等語言的綁定

3.視窗包

(1)FLTK——小型的跨平台C++視窗組件庫

(2)Qt——跨平台C++視窗組件庫,提供了許多OpenGL輔助對象,抽象掉了桌面版OpenGL與OpenGLES之間的區別

(3)wxWidgets——跨平台C++視窗組件庫

歷史

1980年代,開發可以用在各種各樣圖形硬體上的軟體是個真正的挑戰。通常,軟體開發人員為每種硬體編寫自定義的接口和驅動程式。但這非常昂貴並會導致大量工作的重複。

20世紀90年代初,SGI成為工作站3D圖形領域的領導者。其IRISGL的API被認為是最先進的科技並成為事實上的行業標準,而基於開放標準的PHIGS則相形見絀。IRISGL更容易使用,而且還支持即時模式的渲染。相比之下,PHIGS難於使用並且功能老舊。

SGI的競爭對手(包括Sun惠普和IBM)通過擴展PHIGS標準也能將3D硬體投入市場。這反過來導致SGI市場份額的削弱,因為有越來越多的3D圖形硬體供應商進入市場。為攻占市場,SGI決定把IRISGLAPI轉變為一項開放標準,即OpenGL。

然而,SGI擁有大量的軟體客戶,對他們來說從IRISGL遷移到OpenGL將需要巨額投資。此外,IRISGL的應用程式接口擁有與3D圖形不相關的函式。例如,它包括視窗、鍵盤和滑鼠的API,部分原因是由於它是在XWindow系統和Sun公司的NeWS系統之前開發的。而且,IRISGL庫由於授權和專利問題並不適合開放。上述種種因素要求SGI繼續支持先進和專有的IRISInventor和IRISPerformer應用程式接口。

IRISGL的限制之一是只能訪問由底層硬體支持的功能。如果圖形硬體不支持一項功能,那么該應用程式將不能使用它。OpenGL通過為硬體不具備的功能提供軟體支持克服了此問題,這就允許應用程式在相對較弱的系統中使用先進的圖形技術。OpenGL標準化了訪問硬體的方式:硬體接口程式的開發(有時也稱為設備驅動程式)交由硬體製造商,而視窗功能委託給底層作業系統。讓大量不同種類的圖形硬體講同一種語言影響深遠,它為軟體開發者進行3D軟體發展提供了更高層次的平台。

1992年,SGI公司領導了OpenGL架構審查委員會(OpenGLARB)的創建。該委員會由若干公司組成,負責未來OpenGL規範的維護和擴展。

微軟在1995年發布Direct3D,Direct3D最終成為OpenGL的主要競爭對手。1997年12月17日,微軟和SGI發起華氏溫標項目,旨在統一OpenGL和Direct3D的接口。1998年,惠普加入。後來,由於SGI的財政限制、微軟的戰略以及缺乏行業普遍支持,項目1999年遭棄。

2006年7月,OpenGL架構評審委員會投票決定將OpenGLAPI標準的控制權交給KhronosGroup。

綁定

為了加強它的多語言和多平台特性,已經用很多語言開發了OpenGL的各種綁定和移植。最值得注意的是,Java3D庫已經可以利用OpenGL(另一個選擇可能是DirectX)作為它的硬體加速了。OpenGL官方網頁列出了用於Java、Fortran90、PerlPikePython、Ada和Visual Basic的多個綁定。

高級功能

OpenGL被設計為只有輸出的,所以它只提供渲染功能。核心API沒有視窗系統、音頻、列印、鍵盤/滑鼠或其他輸入設備的概念。雖然這一開始看起來像是一種限制,但它允許進行渲染的代碼完全獨立於他運行的作業系統,允許跨平台開發。然而,有些集成於原生視窗系統的東西需要允許和宿主系統互動。這通過下列附加API實現:

1.GLX-X11(包括透明的網上)

2.WGL-MicrosoftWindows

另外,GLUT庫能夠以可移植的方式提供基本的視窗功能。

版本

OpenGL進化自(而且風格很相似)SGI的早期3D接口IRISGL。IRISGL的一個限制是它只能訪問底層硬體提供的特性。如果圖形硬體不支持例如紋理映射這樣的功能,那么應用程式就不能使用它。OpenGL通過在軟體上對硬體不支持的特性提供支持的方法克服了這個問題,允許應用程式在相對低配置的系統上使用高級的圖形特性。Fahrenheit項目是Microsoft和SGI之間的聯合行動,為了統一OpenGL和Direct3D接口的目的。它一開始提出了一些把規則帶給互動3D計算機圖形API世界的承諾,但因為SGI的財政限制,這個項目後來被放棄了。

2002年微軟的DirectX9提出了全新的Shader繪圖功能以及高端著色語言(HLSL),OpenGL霸主地位開始被瓦解。這使得3DLabs了解到必須開發全新的OpenGL2.0版本,但僅加入支持GLSL的功能。2006年Khronos接手OpenGL,立刻著手發展LongsPeak與MountEvans。2008年推出OpenGL3,但評價普遍不高。

2010年3月10日,OpenGL同時推出了3.3和4.0版本,同年7月26日又發布了4.1版本。2011年8月8日發布4.2版本。2013年發布4.3版。

參見

KhronosGroup

OpenGLES

電腦知識(二)

電腦已經成為人們工作學習生活中不可缺少的工具,相信越來越多的人會使用電腦。但是在使用的過程中您是不是經常遇到這樣或者那樣的問題,令您無法正常的使用?那么,讓我們一起來了解一些電腦的基本知識,讓您的工作學習生活變得更加的愜意!

顯示卡基本概念

顯示卡作為電腦最重要的配件之一,每個想要買電腦的人都需要了解它的基本知識,以便能挑到最適合自己的顯示卡。這個任務會簡要介紹顯示卡的一些重要的名詞概念。

相關詞條

相關搜尋

熱門詞條