OpenGL

OpenGL

編程接口規格的專業的圖形程序接口
OpenGL(全寫Open Graphics Library)是個定義了一個跨編程語言、跨平台的編程接口規格的專業的圖形程序接口。它用于三維圖像(二維的亦可),是一個功能強大,調用方便的底層圖形庫。OpenGL是一個開放的三維圖形軟件包,它獨立于窗口系統和操作系統,以它為基礎開發的應用程序可以十分方便地在各種平台間移植,它具有七大功能:建模[提供基本的點、線、多邊形的繪制函數外,還提供了複雜的三維物體(球、錐、多面體、茶壺等)以及複雜曲線和曲面繪制函數]、變換、顔色模式設置、光照和材質設置、紋理映射、雙緩存動畫、位圖顯示和圖象增強圖象功能。
    中文名:開放圖形庫(英文縮寫OpenGL) 外文名:Open Graphics Library 别名: 使用類型:開放庫文件 應用平台:Windows、類Unix、Linux、MacOS 開發商:SGI公司

基本介紹

OpenGL™ 是行業領域中最為廣泛接納的 2D/3D 圖形 API, 其自誕生至今已催生了各種計算機平台及設備上的數千優秀應用程序。OpenGL™ 是獨立于視窗操作系統或其它操作系統的,亦是網絡透明的。在包含CAD、内容創作、能源、娛樂、遊戲開發、制造業、制藥業及虛拟現實等行業領域中,OpenGL™ 幫助程序員實現在 PC、工作站、超級計算機等硬件設備上的高性能、極具沖擊力的高視覺表現力圖形處理軟件的開發。

OpenGL的前身是SGI公司為其圖形工作站開發的IRIS GL。IRIS GL是一個工業标準的3D圖形軟件接口,功能雖然強大但是移植性不好,于是SGI公司便在IRIS GL的基礎上開發了OpenGL。OpenGL的英文全稱是“Open Graphics Library”,顧名思義,OpenGL便是“開放的圖形程序接口”。雖然DirectX在家用市場全面領先,但在專業高端繪圖領域,OpenGL是不能被取代的主角。

OpenGL是個與硬件無關的軟件接口,可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之間進行移植。因此,支持OpenGL的軟件具有很好的移植性,可以獲得非常廣泛的應用。由于OpenGL是圖形的底層圖形庫,沒有提供幾何實體圖元,不能直接用以描述場景。但是,通過一些轉換程序,可以很方便地将AutoCAD、3DS/3DSMAX等3D圖形設計軟件制作的DXF和3DS模型文件轉換成OpenGL的頂點數組。

在OpenGL的基礎上還有Open Inventor、Cosmo3D、Optimizer等多種高級圖形庫,适應不同應用。其中,Open Inventor應用最為廣泛。該軟件是基于OpenGL面向對象的工具包,提供創建交互式3D圖形應用程序的對象和方法,提供了預定義的對象和用于交互的事件處理模塊,創建和編輯3D場景的高級應用程序單元,有打印對象和用其它圖形格式交換數據的能力。

OpenGL的發展一直處于一種較為遲緩的态勢,每次版本的提高新增的技術很少,大多隻是對其中部分做出修改和完善。1992年7月,SGI公司發布了OpenGL的1.0版本,随後又與微軟公司共同開發了Windows NT版本的OpenGL,從而使一些原來必須在高檔圖形工作站上運行的大型3D圖形處理軟件也可以在微機上運用。

1995年OpenGL的1.1版本面市,該版本比1.0的性能有許多提高,并加入了一些新的功能。其中包括改進打印機支持,在增強元文件中包含OpenGL的調用,頂點數組的新特性,提高頂點位置、法線、顔色、色彩指數、紋理坐标、多邊形邊緣标識的傳輸速度,引入了新的紋理特性等等。OpenGL 1.5又新增了“OpenGL Shading Language”,該語言是“OpenGL 2.0”的底核,用于着色對象、頂點着色以及片斷着色技術的擴展功能。

OpenGL 2.0标準的主要制訂者并非原來的SGI,而是逐漸在ARB中占據主動地位的3DLabs。2.0版本首先要做的是與舊版本之間的完整兼容性,同時在頂點與像素及内存管理上與DirectX共同合作以維持均勢。OpenGL 2.0将由OpenGL 1.3的現有功能加上與之完全兼容的新功能所組成(如圖一)。借此可以對在ARB停滞不前時代各家推出的各種糾纏不清的擴展指令集做一次徹底的精簡。此外,硬件可編程能力的實現也提供了一個更好的方法以整合現有的擴展指令。

目前,随着DirectX的不斷發展和完善,OpenGL的優勢逐漸喪失,至今雖然已有3Dlabs提倡開發的2.0版本面世,在其中加入了很多類似于DirectX中可編程單元的設計,但廠商和用戶的認知程度并不高,未來的OpenGL發展前景迷茫。

發展曆程

1992年7月,SGI公司發布了OpenGL的1.0版本,随後又與微軟公司共同開發了Windows NT版本的OpenGL,從而使一些原來必須在高檔圖形工作站上運行的大型3D圖形處理軟件也可以在微機上運用。

1995年OpenGL的1.1版本面市,該版本較1.0性能提高許多,并加入了一些新的功能。包括提高頂點位置、法線、顔色、色彩指數、紋理坐标、多邊形邊緣标識的傳輸速度,引入了新的紋理特性等等。

1997年,Windows 95下3D遊戲的大量湧現,遊戲開發公司迫切需要一個功能強大、兼容性好的3D圖形接口,而當時微軟公司自己的3D圖形接口DirectX 3.0功能卻是很糟糕。因而以制作《雷神之錘》等經典3D射擊遊戲而著名的id公司同其它一些遊戲開發公司一同強烈要求微軟在Windows 95中加入對OpenGL的支持。微軟公司最終在Windows 95的OSR2版和後來的Windows 版本中加入了對OpenGL的支持。這樣,不但許多支持OpenGL的電腦3D遊戲得到廣泛應用,而且許多在3D圖形設計軟件也可以運用支持OpenGL标準的3D加速卡,大大提高其3D圖形的處理速度。

2003年的7月28日,SGI和ARB公布了OpenGL 1.5。OpenGL 1.5中包括OpenGL ARB的正式擴展規格繪制語言“OpenGL Shading Language”。OpenGL 1.5的新功包括:頂點Buffer Object、Shadow功能、隐蔽查詢、非乘方紋理等。

2004年8月,OpenGL2.0版本發布~OpenGL 2.0标準的主要制訂者并非原來的SGI,而是逐漸在ARB中占據主動地位的3Dlabs。OpenGL2.0支持OpenGL Shading Language、新的shader擴展特性以及其他多項增強特性。

2008年8月初Khronos工作組在Siggraph 2008大會上宣布了OpenGL 3.0圖形接口規範,GLSL1.30 shader語言和其他新增功能将再次對未來開放3D接口發展指明方向。

OpenGL 3.0 API開發代号為Longs Peak,和以往一樣,OpenGL 3.0仍然作為一個開放性和跨平台的3D圖形接口标準,在Shader語言盛行的今天,OGL3.0增加了新版本的shader語言:GLSL 1.30,可以充分發揮當前可編程圖形硬件的潛能。同時,OGL3.0還引入了一些新的功能,例如頂點矩陣對象,全幀緩存對象功能,32bit浮點紋理和渲染緩存,基于阻塞隊列的條件渲染,緊湊行半浮點頂點和像素數據,四個新壓縮機制等等。

2009年3月又公布了升級版新規範OpenGL 3.1,也是這套跨平台免費API有史以來的第九次更新。OpenGL 3.1将此前引入的OpenGL着色語言“GLSL”從1.30版升級到了1.40版,通過改進程序增強了對最新可編程圖形硬件的訪問,還有更高效的頂點處理、擴展的紋理功能、更彈性的緩沖管理等等。寬泛地講,OpenGL 3.1在3.0版的基礎上對整個API模型體系進行了簡化,可大幅提高軟件開發效率。

2009年8月Khronos小組發布了OpenGL 3.2,這是一年以來OpenGL進行的第三次重要升級。該版本仍然延續了OpenGL發展的方向讓圖形程序開發者能在多種操作系統和平台下更好的利用新的GPU功能。OpenGL3.2版本提升了性能表現、改進了視覺質量、提高了幾何圖形處理速度,而且使Direct3D程序更容易移植為OpenGL。除OpenGL之外,Khronos還将其開發的其它标準進行了協調改進,以求可以在更廣泛的領域提供強大的圖形功能和計算生态系統,這些标準包括用于并行計算的OpenCL、用于移動3D圖形開發的OpenGL ES和用于網絡3D開發的WebGL。

2010年7月26日發布OpenGL 4.1和OpenGL OpenGL Shading Language 4.10。OpenGL4.1提高視覺密集型應用OpenCL™的互操作性,并繼續加速計算剖面為核心的支持和兼容性第一次推出的OpenGL 3.2,使開發人員能夠使用一個簡化的API或保留向後兼容現有的OpenGL代碼,這取決于他們的市場需求。

Khronos旗下的OpenGL ARB(Architecture Review Board)工作組推出了GLSL 1.5OpenGLShading Language(OpenGL着色語言)的升級版,以及在OpenGL3.2框架下推出了兩個新功能,可以讓開發者在開發新程序時能夠在使用流水線内核特性或兼容性特性之間做出選擇,其中兼容性特性會提供與舊版OpenGL之間的兼容性。

2011年8月9日在溫哥華舉行的SIGGRAPH 2011大會上Khronos發布了新的OpenGL 4.2标準細節,對于支持現有硬件的API加入了部分新的支持特性。和OpenGL 4.1一樣,OpenGL 4.2主要應用于DX11級别硬件如NVIDIA GeForce 400/500,Radeon HD 5000/6000系列顯卡,不過NVIDIA的開發者社區之前曾經表示部分特性可通過擴展功能在最老支持OpenGL2/DX9級别的硬件上實現。

特點功能

OpenGL是一個開放的三維圖形軟件包,它獨立于窗口系統和操作系統,以它為基礎開發的應用程序可以十分方便地在各種平台間移植;OpenGL可以與Visual C++緊密接口,便于實現機械手的有關計算和圖形算法,可保證算法的正确性和可靠性;OpenGL使用簡便,效率高。它具有七大功能:

1.建模:OpenGL圖形庫除了提供基本的點、線、多邊形的繪制函數外,還提供了複雜的三維物體(球、錐、多面體、茶壺等)以及複雜曲線和曲面繪制函數。

2.變換:OpenGL圖形庫的變換包括基本變換和投影變換。基本變換有平移、旋轉、縮放、鏡像四種變換,投影變換有平行投影(又稱正射投影)和透視投 影兩種變換。其變換方法有利于減少算法的運行時間,提高三維圖形的顯示速度。

3.顔色模式設置:OpenGL顔色模式有兩種,即RGBA模式和顔色索引(Color Index)。

4.光照和材質設置:OpenGL光有自發光(Emitted Light)、環境光(Ambient Light)、漫反射光(Diffuse Light)和高光(Specular Light)。材質是用光反射率來表示。場景(Scene)中物體最終反映到人眼的顔色是光的紅綠藍分量與材質紅綠藍分量的反射率相乘後形成的顔色。

5:紋理映射(Texture Mapping)。利用OpenGL紋理映射功能可以十分逼真地表達物體表面細節。

6:位圖顯示和圖象增強圖象功能除了基本的拷貝和像素讀寫外,還提供融合(Blending)、抗鋸齒(反走樣)(Antialiasing)和霧(fog)的特殊圖象效果處理。以上三條可使被仿真物更具真實感,增強圖形顯示的效果。

7:雙緩存動畫(Double Buffering)雙緩存即前台緩存和後台緩存,簡言之,後台緩存計算場景、生成畫面,前台緩存顯示後台緩存已畫好的畫面。

此外,利用OpenGL還能實現深度暗示(Depth Cue)、運動模糊(Motion Blur)等特殊效果。從而實現了消隐算法。OpenGL設備運用,目前瑞芯微2918芯片和英偉達芯片Tegra2 就是采用OpenGL 2.0技術進行圖形處理,而基于瑞芯微2918芯片方案代表是台電T760和微蜂X7平闆電腦所采用到。

高級功能

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

* GLX - X11(包括透明的網絡)

* WGL - Microsoft Windows

* AGL - Apple MacOS

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

規範發布

2012年8月7日,Khronos Group組織也公布了桌面版OpenGL的最新版本4.3,也算是給這個3D API二十歲生日的最好禮物。 1992年,OpenGL 1.0誕生,此後曆經二十年發展,先後衍生了四個世代,功能日漸強大,普及範圍也是越來越廣。雖然它沒有微軟DirectX在遊戲中那麼風光,但也在專業圖形等領域成為衆多開發者的首選,而且陸續衍生了OpenGL ES、OpenCL、WebGL等一幫同門師兄弟,生态系統日臻完善。

發展現狀

Open GL仍然是唯一能夠取代微軟對3D圖形技術的完全控制的API。它仍然具有一定的生命力,但是Silicon Graphics已經不再以任何讓微軟不悅的方式推廣Open GL,因而它存在較高的風險。遊戲開發人員是一個有着獨立思想的群體,很多重要的開發人員目前仍然在使用Open GL。因此,硬件開發商正在設法加強對它的支持。Direct3D目前還不能支持高端的圖形設備和專業應用; Open GL在這些領域占據着統

治地位。最後,開放源碼社區(尤其是Mesa項目)一直緻力于為任何類型的計算機(無論它們是否使用微軟的操作系統)提供Open GL支持。

目前,國内的三維遊戲開發技術正處于趕超國外的關鍵時期,從創意、策劃、研究開發與實現,到遊戲的運營與維護,都有大量的知識值得學習和摸索。由于 Linux 操作系統平台的大力推廣,基于Linux 的各種應用軟件也不斷壯大,因此基于跨平台圖形庫的跨平台三維遊戲開發也越來越受重視。OpenGL(open graphics library)是一種獨立的平台無關的三維圖形開發庫,在各種語言下進行主框架開發并結合應用OpenGL 函數都可以開發出三維戲。但是由于框架開發的平台相關性使遊戲無法跨平台編譯運行,因此glut+OpenGL 的方式成了一種很好的選擇。

但是在對複雜框架和各種媒體的支持方面,glut 并不理想。在Linux 下可以采用FLTK 等框架平台技術實現包括按鈕在内的比較複雜的框架功能,但是需要專門的Linux 開發環境,衆多的Window 環境下的KDE 愛好者明顯對此無法适從。相反,SDL(Simple DirectMedia Layer)作為免費的跨平台多媒體應用編程接口,已經被人們廣泛用于開發二維遊戲,其優秀的消息框架支持、文件支持和聲音支持等都使得它成為能與微軟DirectX 匹敵的最為成熟的技術之一。

有關技術

擴展

當獨立廠商創建一種新技術時,OpenGL标準允許它們通過“擴展”的方法提供所擴展的功能。然後一個擴展就分成兩部分發布:包含擴展函數原型的頭文件和作為廠商的設備驅動。每個廠商有一個用于命名它們的新函數和常量的字母縮寫。例如,NVIDIA的縮寫(“NV”)用于定義它們的專有函數“glCombinerPara-

meterfvNV()”和它們的常量“GL_NORMAL_MAP_NV”。如果多于一個廠商同意實現相同的擴展功能,那麼就用縮寫“EXT”。進一步,架構評審委員會可能“祝福”這個擴展,那麼這就被稱為一個“标準擴展”,使用縮寫“ARB”。第一個ARB擴展是GL_ARB_multitexture。根據官方擴展提升路徑,多紋理不再是可選實現的ARB擴展,它已經是OpenGL 1.4以後的核心API的一部分。

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

1,GLU

2,GLUT

3,GLUI

4,GLEW

5,GLEE

6,FREEGLUT(GLUT已經于1998年不再更新了。于是就有了freeglut)

特别是,OpenGL Performer庫——由SGI開發并可以在IRIX、Linux和Microsoft Windows的一些版本上使用,構建于OpenGL,可以創建實時可視化仿真程序。

當開發者需要使用最新的OpenGL擴展時,他們往往需要使用GLEW或者是GLEE庫提供的功能,可以在程序的運行期判斷當前硬件是否支持相關的擴展,防止程序崩潰甚至造成硬件損壞。

綁定

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

規範

Khronos Group在2009年3月又公布了升級版新規範OpenGL 3.1,也是這套跨平台免費API有史以來的第九次更新。

OpenGL 3.1将此前引入的OpenGL着色語言“GLSL”從1.30版升級到了1.40版,通過改進程序增強了對最新可編程圖形硬件的訪問,還有更高效的頂點處理、擴展的紋理功能、更彈性的緩沖管理等等。寬泛地講,OpenGL 3.1在3.0版的基礎上對整個API模型體系進行了簡化,可大幅提高軟件開發效率。

OpenGL 3.1主要新特性:Texture Buffer Objects(紋理緩沖對象)、Uniform Buffer Objects(統一緩沖對象)、Signed Normalized Textures(符号正常化紋理)、Primitive Restart(基本元素重啟)、Instancing(實例化)、CopyBuffer API(拷貝緩沖接口)……

與OpenGL 3.1規範同步,OpenGL架構評審委員會(ARB)也發布了一個兼容性擴展,能讓開發人員在訪問OpenGL 3.1裡已經删除的OpenGL 1.x/2.x功能,确保應用程序的全面向下兼容性。

OpenGL 3.1公布後,業界圖形廠商很快予以了大力支持。AMD OpenGL主管Suki Samra表示:“AMD全面用戶OpenGL API,會在今後的Radeon和FirePro産品驅動程序中支持OpenGL 3.1。”NVIDIA市場營銷副總裁Dan Vivoli表示:“NVIDIA承諾盡快部署OpenGL 3.1,我們也很自豪地在規範公布同一天放出了自己的測試版驅動程序。”

市場調研機構Jon Peddie Research預測,OpenGL 3.1規範圖形硬件的安裝規模将超過1億。AMD、NVIDIA、S3 Graphics的顯卡驅動都已經支持OpenGL 3.0。

上一篇:電磁鐵

下一篇:Webstorm

相關詞條

相關搜索

其它詞條