OpenGL编辑
OpenGL編輯
OpenGL(全寫Open Graphics Library)是個定義了一個跨編程語言、跨平臺的編程接口規格的專業的圖形程序接口。它用于三維圖象(二維的亦可),是一個功能強大,調用方便的底層圖形庫。 中文名 開放圖形庫(英文Open Graphics Library的縮寫) 外文名 Open Graphics Library 平????臺 Windows、類Unix、Linux、MacOS 是否開源 是 最近更新日期 2014年8月11日 軟件類別 開放庫文件目錄
1基本介紹
2發展現狀
3有關技術
4相關信息
1基本介紹編輯
[1]OpenGL? 是行業領域中最為廣泛接納的 2D/3D 圖形 API, 其自誕生至今已催生了各種計算機平臺及設備上的數千優秀應用程序。OpenGL? 是獨立于視窗操作系統或其它操作系統的,亦是網絡透明的。在包含CAD[2]、內容創作、能源、娛樂、游戲開發、制造業、制藥業及虛擬現實等行業領域中,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[2]、3DS/3DSMAX[3]等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等一幫同門師兄弟,生態系統日臻完善。2發展現狀編輯
OpenGL仍然是唯一能夠取代微軟對3D圖形技術的完全控制的API。它仍然具有一定的生命力,但是Silicon Graphics已經不再以任何讓微軟不悅的方式推廣OpenGL,因而它存在較高的風險。游戲開發人員是一個有著獨立思想的群體,很多重要的開發人員目前仍然在使用OpenGL。因此,硬件開發商正在設法加強對它的支持。Direct3D目前還不能支持高端的圖形設備和專業應用; OpenGL在這些領域占據著統治地位。最后,開放源碼社區(尤其是Mesa項目)一直致力于為任何類型的計算機(無論它們是否使用微軟的操作系統)提供OpenGL支持。 目前,國外的三維游戲開發技術,從創意、策劃、研究開發與實現,到游戲的運營與維護,都有大量的知識值得學習和摸索。由于 Linux 操作系統平臺的大力推廣,基于Linux 的各種應用軟件也不斷壯大,因此基于跨平臺圖形庫的跨平臺三維游戲開發也越來越受重視。OpenGL(open graphics library)是一種獨立的平臺無關的三維圖形開發庫,在各種語言下進行主框架開發并結合應用OpenGL 函數都可以開發出三維游戲。但是由于框架開發的平臺相關性使游戲無法跨平臺編譯運行,因此glut+OpenGL 的方式成了一種很好的選擇。但是在對復雜框架和各種媒體的支持方面,glut 并不理想。在Linux 下可以采用FLTK 等框架平臺技術實現包括按鈕在內的比較復雜的框架功能,但是需要專門的Linux 開發環境,眾多的Window 環境下的KDE 愛好者明顯對此無法適從。相反,SDL(Simple DirectMedia Layer)作為免費的跨平臺多媒體應用編程接口,已經被人們廣泛用于開發二維游戲,其優秀的消息框架支持、文件支持和聲音支持等都使得它成為能與微軟DirectX 匹敵的最為成熟的技術之一。 截止2012年8月7日,Khronos Group公布了最新的OpenGL 4.3規范。3有關技術編輯
擴展
當獨立廠商創建一種新技術時,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[4] 6)FREEGLUT(GLUT已經于1998年不再更新了。于是就有了freeglut) 特別是,OpenGL Performer庫——由SGI開發并可以在IRIX、Linux和Microsoft Windows的一些版本上使用,構建于OpenGL,可以創建實時可視化仿真程序。 當開發者需要使用最新的OpenGL擴展時,他們往往需要使用GLEW或者是GLEE庫提供的功能,可以在程序的運行期判斷當前硬件是否支持相關的擴展,防止程序崩潰甚至造成硬件損壞。綁定
為了加強它的多語言和多平臺特性,已經用很多語言開發了OpenGL的各種綁定和移植。最值得注意的是,Java3D庫已經可以利用OpenGL(另一個選擇可能是DirectX)作為它的硬件加速了。OpenGL官方網頁[5]列出了用于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。4相關信息編輯
1995年至1996年,微軟實行了一項新計劃,以支持在Windows95上運行游戲,目標是把市場擴展到被任天堂和世嘉控制的游戲領域。然而,微軟不想用已經在NT上提供的OpenGL技術。微軟收購了Rendermorphics,Ltd.并得到他的被稱作RealityLab的3D API。經重新整理,微軟發布了新的3D API——Direct3D。 微軟,推行Direct3D,凍結OpenGL! 微軟當時拒絕了在Window95上支持OpenGL。不止如此,微軟采取異常手段收回對OpenGL的MCD驅動接口的支持,以致硬件廠商不得不放棄已經進入最后測試的OpenGL驅動。微軟的市場部門開始向游戲開發商、硬件廠商、新聞出版機構推銷Direct3D,同時排斥OpenGL。 API之戰! Silicon Graphics和很多OpenGL用戶都依賴OpenGL創新且高性能的技術。但很明顯微軟打算用Direct3D代替OpenGL,盡管D3D有很多問題而且不能像OpenGL那樣被硬件廠商擴展。Silicon Graphics決定在1996 SIGGRAPH會議上作一項演示。演示證明OpenGL至少和D3D一樣快,從而駁倒微軟的市場論調。因為OpenGL是業界公認標準,比D3D功能豐富,而且圖像質量要高一些,所以演示在計算機圖形和游戲開發社區導致了激烈論戰。 游戲開發者要求OpenGL和D3D站在同等地位! 當技術和市場問題暴露,強烈的支持OpenGL行動開始了。Doom的開發者John Carmack聲明拒絕D3D,Chris Hecker在游戲開發雜志上發表了兩套API的全面分析,以微軟應放棄D3D為結論。游戲開發者先后兩次向微軟遞交請愿書。第一次由56名首席游戲開發者要求微軟發行OpenGL MCD驅動,但未成功,因為會讓OpenGL與D3D競爭。第二次的公開信由254人簽名開始,截止時達到1400人。微軟的回答仍是重申舊市場立場。盡管請愿者清楚的要求兩套API同等競爭以促進發展,微軟卻以增加D3D的投資、更加減少OpenGL的投資為回應。 Fahrenheit——D3D與OpenGL的合并? Silicon Graphics,Microsoft, HP,Intel達成協議聯合開發下一代3D API——Fahrenheit。但不了了之,因為微軟的打算是把OpenGL的技術用到D3D里并且以此之名驅除OpenGL的威脅。(估計DirectX 8 Graphics即是剩下微軟獨自開發的Fahrenheit,吸收了OpenGL的很多東西。) OpenGL豪氣不減當年! OpenGL依然是唯一能與微軟單獨控制的D3D對立的API,盡管Silicon Graphics不再以任何微軟不能接受的方式推行OpenGL。游戲開發這是獨立的,并且很多關鍵人物在用OpenGL,因此,硬件廠商正努力提高對其支持。D3D仍不能支持高端圖像和專業應用,而OpenGL主宰著這些土地。在開放原碼社區,Mesa項目正提供獨立于微軟的OpenGL驅動。 譯者注:表面上好像D3D比OpenGL支持更多的功能,其實由于D3D不支持硬件擴展,如硬件全景陰影,硬件渲染順序無關半透明材質等新技術根本無法使用,而D3D(特指D3D8)本身提供的功能只有一小部分能在使用HAL且硬件不支持時模擬,你要用大量代碼分析硬件能力和采取不同策略。總結
- 上一篇: 海南大学植物代谢组学技术开发与创新应用课
- 下一篇: gtk编辑