OpenGL的特點及功能

openkk 12年前發布 | 111K 次閱讀 OpenGL 圖形/圖像處理

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平板電腦所采用到。

現狀

  Open GL仍然是唯一能夠取代微軟對3D圖形技術的完全控制的API。它仍然具有一定的生命力,但是Silicon Graphics已經不再以任何讓微軟不悅的方式推廣Open GL,因而它存在較高的風險。游戲開發人員是一個有著獨立思想的群體,很多重要的開發人員目前仍然在使用Open GL。因此,硬件開發商正在設法加強對它的支持。Direct3D目前還不能支持高端的圖形設備和專業應用; Open GL在這些領域占據著統治地位。最后,開放源碼社區(尤其是Mesa項目)一直致力于為任何類型的計算機(無論它們是否使用微軟的操作系統)提供Open GL支持。
   截止2012年5月已經公布了OpenGL4.2。
   08年8月正式公布OpenGL3.0版本。并且得到了nv的支持,其項目主頁上提供針對N卡的sdk下載。
   目前,國內的三維游戲開發技術正處于趕超國外的關鍵時期,從創意、策劃、研究開發與實現,到游戲的運營與維護,都有大量的知識值得學習和摸索。由于 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   特別是,OpenGL Performer庫——由SGI開發并可以在IRIX、Linux和Microsoft Windows的一些版本上使用,構建于OpenGL,可以創建實時可視化仿真程序。   當開發者需要使用最新的OpenGL擴展時,他們往往需要使用GLEW或者是GLEE庫提供的功能,可以在程序的運行期判斷當前硬件是否支持相關的擴展,防止程序崩潰甚至造成硬件損壞。

綁定

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

OpenGL 3.1規范

  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。

高級功能

  OpenGL被設計為只有輸出的,所以它只提供渲染功能。核心API沒有窗口系統、音頻、打印、鍵盤/鼠標或其它輸入設備的概念。雖然這一開始看起來像是一種限制,但它允許進行渲染的代碼完全獨立于他運行的操作系統,允許跨平臺開發。然而,有些整合于原生窗口系統的東西需要允許和宿主系統交互。這通過下列附加API實現:
    GLX - X11(包括透明的網絡)
   
WGL - Microsoft Windows
   * AGL - Apple MacOS
   另外,GLUT庫能夠以可移植的方式提供基本的窗口功能。

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!