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基本功能
OpenGL能夠對整個三維模型進行渲染著色,從而繪制出與客觀世界十分類似的三維景象。另外OpenGL還可以進行三維交互、動作模擬等。具體的功能主要有以下這些內容。
模型繪制
OpenGL能夠繪制點、線和多邊形。應用這些基本的形體,我們可以構造出幾乎所有的三維模型。OpenGL通常用模型的多邊形的頂點來描述三維模型。如何通過多邊形及其頂點來描述三維模型,在指南的在后續章節會有詳細的介紹。
模型觀察
在建立了三維景物模型后,就需要用OpenGL描述如何觀察所建立的三維模型。觀察三維模型是通過一系列的坐標變換進行的。模型的坐標變換在使觀察者能夠在視點位置觀察與視點相適應的三維模型景觀。在整個三維模型的觀察過程中,投影變換的類型決定觀察三維模型的觀察方式,不同的投影變換得到的三維模型的景象也是不同的。最后的視窗變換則對模型的景象進行裁剪縮放,即決定整個三維模型在屏幕上的圖象。
顏色模式的指定
OpenGL應用了一些專門的函數來指定三維模型的顏色。程序員可以選擇二個顏色模式,即RGBA模式和顏色表模式。在RGBA模式中,顏色直接由RGB值來指定;在顏色表模式中,顏色值則由顏色表中的一個顏色索引值來指定。程序員還可以選擇平面著色和光滑著色二種著色方式對整個三維景觀進行著色。
光照應用
用OpenGL繪制的三維模型必須加上光照才能更加與客觀物體相似。OpenGL提供了管理四種光(輻射光、環境光、鏡面光和漫反射光)的方法,另外還可以指定模型表面的反射特性。
圖象效果增強
OpenGL提供了一系列的增強三維景觀的圖象效果的函數,這些函數通過反走樣、混合和霧化來增強圖象的效果。反走樣用于改善圖象中線段圖形的鋸齒而更平滑,混合用于處理模型的半透明效果,霧使得影像從視點到遠處逐漸褪色,更接近于真實。
位圖和圖象處理
OpenGL還提供了專門對位圖和圖象進行操作的函數。
紋理映射
三維景物因缺少景物的具體細節而顯得不夠真實,為了更加逼真地表現三維景物,OpenGL提供了紋理映射的功能。OpenGL提供的一系列紋理映射函數使得開發者可以十分方便地把真實圖象貼到景物的多邊形上,從而可以在視窗內繪制逼真的三維景觀。
實時動畫
為了獲得平滑的動畫效果,需要先在內存中生成下一幅圖象,然后把已經生成的圖象從內存拷貝到屏幕上,這就是OpenGL的雙緩存技術(double buffer)。OpenGL提供了雙緩存技術的一系列函數。
交互技術
目前有許多圖形應用需要人機交互,OpenGL提供了方便的三維圖形人機交互接口,用戶可以選擇修改三維景觀中的物體。
高級功能
OpenGL被設計為只有輸出的,所以它只提供渲染功能。核心API沒有窗口系統、音頻、打印、鍵盤/鼠標或其它輸入設備的概念。雖然這一開始看起來像是一種限制,但它允許進行渲染的代碼完全獨立于他運行的操作系統,允許跨平臺開發。然而,有些整合于原生窗口系統的東西需要允許和宿主系統交互。這通過下列附加API實現:
* GLX - X11(包括透明的網絡)
* WGL - Microsoft Windows
* AGL - Apple MacOS
另外,GLUT庫能夠以可移植的方式提供基本的窗口功能。
編輯本段擴展
當獨立廠商創建一種新技術時,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。
評論
查看更多