热门问题
时间线
聊天
视角

OpenGL

應用程序編程接口,用於渲染2維和3維矢量圖形 来自维基百科,自由的百科全书

OpenGL
Remove ads

OpenGL(英語:Open Graphics Library,譯名:開放圖形庫或者「開放式圖形庫」),是用於渲染2D3D向量圖形的跨語言跨平台應用程式編程介面(API)。這個介面由近350個不同的函數呼叫組成,用來從簡單的圖形位元繪製複雜的三維景象。而另一種程式介面系統是僅用於Microsoft Windows上的Direct3D。OpenGL常用於CAD虛擬實境、科學視覺化程式和電子遊戲開發

快速預覽 原作者, 開發者 ...
Remove ads

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

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

Remove ads

設計

Thumb
圖形管線化

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

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

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

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

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

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

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

Remove ads

文件

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

  • 紅寶書

Dave Shreiner, Graham Sellers, John M. Kessenich and Bill M. Licea-Kane. 2013. OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 4.3(8th Edition). Addison-Wesley Professional. ISBN 978-0321773036.

  • 橙寶書

Randi J. Rost, Bill M. Licea-Kane, Dan Ginsburg, John M. Kessenich, Barthold Lichtenbelt, Hugh Malan and Mike Weiblen. 2009. OpenGL Shading Language (3rd Edition). Addison-Wesley Professional. ISBN 978-0321637635

Remove ads

相關程式庫

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

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

特別是,OpenGL Performer英語OpenGL Performer庫——由SGI開發並可以在IRIXLinuxMicrosoft Windows的一些版本上使用,構建於OpenGL,可以建立即時視覺化仿真程式。

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

上下文與窗口套件

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

  • 以下套件可以用來建立並管理 OpenGL 窗口,也可以管理輸入,但幾乎沒有除此以外的其它功能:
    • GLFW——跨平台窗口和鍵盤、滑鼠、手柄處理;偏向遊戲
    • freeglut——跨平台窗口和鍵盤、滑鼠處理;API 是 GLUT API 的超集,同時也比 GLUT 更新、更穩定
    • GLUT——早期的窗口處理庫,已不再維護
  • 支援建立 OpenGL 窗口的還有一些「多媒體庫」,同時還支援輸入、聲音等類似遊戲的程式所需要的功能:
    • Allegro 5——跨平台多媒體庫,提供針對遊戲開發的 C API
    • SDL——跨平台多媒體庫,提供 C API
    • SFML英語SFML——跨平台多媒體庫,提供 C++ API;同時也提供 C#、Java、Haskell、Go 等語言的繫結
  • 窗口套件
    • FLTK——小型的跨平台 C++ 窗口組件庫
    • Qt——跨平台 C++ 窗口組件庫,提供許多OpenGL輔助對象
    • wxWidgets——跨平台 C++ 窗口組件庫
Remove ads

歷史

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

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

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

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

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

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

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

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

Remove ads

進階功能

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

  • GLX - X11(包括透明的網絡)
  • WGL - Microsoft Windows

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

版本

OpenGL進化自(而且風格很相似)SGI的早期3D介面IRIS GL。IRIS GL的一個限制是它只能訪問底層硬件提供的特性。如果圖形硬件不支援例如紋理對映這樣的功能,那麼應用程式就不能使用它。OpenGL通過在軟件上對硬件不支援的特性提供支援的方法克服了這個問題,允許應用程式在相對低組態的系統上使用進階的圖形特性。Fahrenheit專案是Microsoft和SGI之間的聯合行動,為了統一OpenGL和Direct3D介面的目的。它一開始提出了一些把規則帶給互動3D電腦圖形API世界的承諾,但因為SGI的財政限制,這個專案後來被放棄了。

2002年微軟的DirectX 9提出了全新的Shader繪圖功能以及高階着色語言(HLSL),OpenGL霸主地位開始被瓦解。這使得3DLabs了解到必須開發全新的OpenGL 2.0版本,但僅加入支援GLSL的功能。2006年Khronos接手OpenGL,立刻着手發展Longs Peak與Mount Evans。2008年推出OpenGL 3,但評價普遍不高。

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

更多資訊 主要版本, 發佈日期 ...
Remove ads

參見

參考文獻

外部連結

Loading content...
Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads