Open GL仍然是唯一能夠取代微軟對3D圖形技術(shù)的完全控制的API。它仍然具有一定的生命力,但是Silicon Graphics已經(jīng)不再以任何讓微軟不悅的方式推廣Open GL,因而它存在較高的風(fēng)險(xiǎn)。游戲開發(fā)人員是一個(gè)有著獨(dú)立思想的群體,很多重要的開發(fā)人員目前仍然在使用Open GL。因此,硬件開發(fā)商正在設(shè)法加強(qiáng)對它的支持。Direct3D目前還不能支持高端的圖形設(shè)備和專業(yè)應(yīng)用; Open GL在這些領(lǐng)域占據(jù)著統(tǒng)治地位。最后,開放源碼社區(qū)(尤其是Mesa項(xiàng)目)一直致力于為任何類型的計(jì)算機(jī)(無論它們是否使用微軟的操作系統(tǒng))提供Open GL支持。
目前,國內(nèi)的三維游戲開發(fā)技術(shù)正處于趕超國外的關(guān)鍵時(shí)期,從創(chuàng)意、策劃、研究開發(fā)與實(shí)現(xiàn),到游戲的運(yùn)營與維護(hù),都有大量的知識(shí)值得學(xué)習(xí)和摸索。由于 Linux 操作系統(tǒng)平臺(tái)的大力推廣,基于Linux 的各種應(yīng)用軟件也不斷壯大,因此基于跨平臺(tái)圖形庫的跨平臺(tái)三維游戲開發(fā)也越來越受重視。OpenGL(open graphics library)是一種獨(dú)立的平臺(tái)無關(guān)的三維圖形開發(fā)庫,在各種語言下進(jìn)行主框架開發(fā)并結(jié)合應(yīng)用OpenGL 函數(shù)都可以開發(fā)出三維游戲。但是由于框架開發(fā)的平臺(tái)相關(guān)性使游戲無法跨平臺(tái)編譯運(yùn)行,因此glut+OpenGL 的方式成了一種很好的選擇。但是在對復(fù)雜框架和各種媒體的支持方面,glut 并不理想。在Linux 下可以采用FLTK 等框架平臺(tái)技術(shù)實(shí)現(xiàn)包括按鈕在內(nèi)的比較復(fù)雜的框架功能,但是需要專門的Linux 開發(fā)環(huán)境,眾多的Window 環(huán)境下的KDE 愛好者明顯對此無法適從。相反,SDL(Simple DirectMedia Layer)作為免費(fèi)的跨平臺(tái)多媒體應(yīng)用編程接口,已經(jīng)被人們廣泛用于開發(fā)二維游戲,其優(yōu)秀的消息框架支持、文件支持和聲音支持等都使得它成為能與微軟DirectX 匹敵的最為成熟的技術(shù)之一。
OpenGL基本功能
OpenGL能夠?qū)φ麄€(gè)三維模型進(jìn)行渲染著色,從而繪制出與客觀世界十分類似的三維景象。另外OpenGL還可以進(jìn)行三維交互、動(dòng)作模擬等。具體的功能主要有以下這些內(nèi)容。
模型繪制
OpenGL能夠繪制點(diǎn)、線和多邊形。應(yīng)用這些基本的形體,我們可以構(gòu)造出幾乎所有的三維模型。OpenGL通常用模型的多邊形的頂點(diǎn)來描述三維模型。如何通過多邊形及其頂點(diǎn)來描述三維模型,在指南的在后續(xù)章節(jié)會(huì)有詳細(xì)的介紹。
模型觀察
在建立了三維景物模型后,就需要用OpenGL描述如何觀察所建立的三維模型。觀察三維模型是通過一系列的坐標(biāo)變換進(jìn)行的。模型的坐標(biāo)變換在使觀察者能夠在視點(diǎn)位置觀察與視點(diǎn)相適應(yīng)的三維模型景觀。在整個(gè)三維模型的觀察過程中,投影變換的類型決定觀察三維模型的觀察方式,不同的投影變換得到的三維模型的景象也是不同的。最后的視窗變換則對模型的景象進(jìn)行裁剪縮放,即決定整個(gè)三維模型在屏幕上的圖象。
顏色模式的指定
OpenGL應(yīng)用了一些專門的函數(shù)來指定三維模型的顏色。程序員可以選擇二個(gè)顏色模式,即RGBA模式和顏色表模式。在RGBA模式中,顏色直接由RGB值來指定;在顏色表模式中,顏色值則由顏色表中的一個(gè)顏色索引值來指定。程序員還可以選擇平面著色和光滑著色二種著色方式對整個(gè)三維景觀進(jìn)行著色。
光照應(yīng)用
用OpenGL繪制的三維模型必須加上光照才能更加與客觀物體相似。OpenGL提供了管理四種光(輻射光、環(huán)境光、鏡面光和漫反射光)的方法,另外還可以指定模型表面的反射特性。
圖象效果增強(qiáng)
OpenGL提供了一系列的增強(qiáng)三維景觀的圖象效果的函數(shù),這些函數(shù)通過反走樣、混合和霧化來增強(qiáng)圖象的效果。反走樣用于改善圖象中線段圖形的鋸齒而更平滑,混合用于處理模型的半透明效果,霧使得影像從視點(diǎn)到遠(yuǎn)處逐漸褪色,更接近于真實(shí)。
位圖和圖象處理
OpenGL還提供了專門對位圖和圖象進(jìn)行操作的函數(shù)。
紋理映射
三維景物因缺少景物的具體細(xì)節(jié)而顯得不夠真實(shí),為了更加逼真地表現(xiàn)三維景物,OpenGL提供了紋理映射的功能。OpenGL提供的一系列紋理映射函數(shù)使得開發(fā)者可以十分方便地把真實(shí)圖象貼到景物的多邊形上,從而可以在視窗內(nèi)繪制逼真的三維景觀。
實(shí)時(shí)動(dòng)畫
為了獲得平滑的動(dòng)畫效果,需要先在內(nèi)存中生成下一幅圖象,然后把已經(jīng)生成的圖象從內(nèi)存拷貝到屏幕上,這就是OpenGL的雙緩存技術(shù)(double buffer)。OpenGL提供了雙緩存技術(shù)的一系列函數(shù)。
交互技術(shù)
目前有許多圖形應(yīng)用需要人機(jī)交互,OpenGL提供了方便的三維圖形人機(jī)交互接口,用戶可以選擇修改三維景觀中的物體。
高級功能
OpenGL被設(shè)計(jì)為只有輸出的,所以它只提供渲染功能。核心API沒有窗口系統(tǒng)、音頻、打印、鍵盤/鼠標(biāo)或其它輸入設(shè)備的概念。雖然這一開始看起來像是一種限制,但它允許進(jìn)行渲染的代碼完全獨(dú)立于他運(yùn)行的操作系統(tǒng),允許跨平臺(tái)開發(fā)。然而,有些整合于原生窗口系統(tǒng)的東西需要允許和宿主系統(tǒng)交互。這通過下列附加API實(shí)現(xiàn):
* GLX - X11(包括透明的網(wǎng)絡(luò))
* WGL - Microsoft Windows
* AGL - Apple MacOS
另外,GLUT庫能夠以可移植的方式提供基本的窗口功能。
編輯本段擴(kuò)展
當(dāng)獨(dú)立廠商創(chuàng)建一種新技術(shù)時(shí),OpenGL標(biāo)準(zhǔn)允許它們通過“擴(kuò)展”的方法提供所擴(kuò)展的功能。然后一個(gè)擴(kuò)展就分成兩部分發(fā)布:包含擴(kuò)展函數(shù)原型的頭文件和作為廠商的設(shè)備驅(qū)動(dòng)。每個(gè)廠商有一個(gè)用于命名它們的新函數(shù)和常量的字母縮寫。例如,NVIDIA的縮寫(“NV”)用于定義它們的專有函數(shù)“glCombinerPara-
meterfvNV()”和它們的常量“GL_NORMAL_MAP_NV”。如果多于一個(gè)廠商同意實(shí)現(xiàn)相同的擴(kuò)展功能,那么就用縮寫“EXT”。進(jìn)一步,架構(gòu)評審委員會(huì)可能“祝?!边@個(gè)擴(kuò)展,那么這就被稱為一個(gè)“標(biāo)準(zhǔn)擴(kuò)展”,使用縮寫“ARB”。第一個(gè)ARB擴(kuò)展是GL_ARB_multitexture。根據(jù)官方擴(kuò)展提升路徑,多紋理不再是可選實(shí)現(xiàn)的ARB擴(kuò)展,它已經(jīng)是OpenGL 1.4以后的核心API的一部分。
幾個(gè)庫創(chuàng)建在OpenGL之上,提供了OpenGL本身沒有的功能:
1)GLU
2)GLUT
3)GLUI
4)GLEW
5)GLEE
特別是,OpenGL Performer庫——由SGI開發(fā)并可以在IRIX、Linux和Microsoft Windows的一些版本上使用,構(gòu)建于OpenGL,可以創(chuàng)建實(shí)時(shí)可視化仿真程序。
當(dāng)開發(fā)者需要使用最新的OpenGL擴(kuò)展時(shí),他們往往需要使用GLEW或者是GLEE庫提供的功能,可以在程序的運(yùn)行期判斷當(dāng)前硬件是否支持相關(guān)的擴(kuò)展,防止程序崩潰甚至造成硬件損壞。
綁定
為了加強(qiáng)它的多語言和多平臺(tái)特性,已經(jīng)用很多語言開發(fā)了OpenGL的各種綁定和移植。最值得注意的是,Java3D庫已經(jīng)可以利用OpenGL(另一個(gè)選擇可能是DirectX)作為它的硬件加速了。OpenGL官方網(wǎng)頁[1]列出了用于Java、Fortran90、Perl、Pike、Python、Ada和Visual Basic的多個(gè)綁定。
OpenGL 3.1規(guī)范
Khronos Group在2009年3月又公布了升級版新規(guī)范OpenGL 3.1,也是這套跨平臺(tái)免費(fèi)API有史以來的第九次更新。
OpenGL 3.1將此前引入的OpenGL著色語言“GLSL”從1.30版升級到了1.40版,通過改進(jìn)程序增強(qiáng)了對最新可編程圖形硬件的訪問,還有更高效的頂點(diǎn)處理、擴(kuò)展的紋理功能、更彈性的緩沖管理等等。寬泛地講,OpenGL 3.1在3.0版的基礎(chǔ)上對整個(gè)API模型體系進(jìn)行了簡化,可大幅提高軟件開發(fā)效率。
OpenGL 3.1主要新特性:Texture Buffer Objects(紋理緩沖對象)、Uniform Buffer Objects(統(tǒng)一緩沖對象)、Signed Normalized Textures(符號正常化紋理)、Primitive Restart(基本元素重啟)、Instancing(實(shí)例化)、CopyBuffer API(拷貝緩沖接口)……
與OpenGL 3.1規(guī)范同步,OpenGL架構(gòu)評審委員會(huì)(ARB)也發(fā)布了一個(gè)兼容性擴(kuò)展,能讓開發(fā)人員在訪問OpenGL 3.1里已經(jīng)刪除的OpenGL 1.x/2.x功能,確保應(yīng)用程序的全面向下兼容性。
OpenGL 3.1公布后,業(yè)界圖形廠商很快予以了大力支持。AMD OpenGL主管Suki Samra表示:“AMD全面用戶OpenGL API,會(huì)在今后的Radeon和FirePro產(chǎn)品驅(qū)動(dòng)程序中支持OpenGL 3.1?!盢VIDIA市場營銷副總裁Dan Vivoli表示:“NVIDIA承諾盡快部署OpenGL 3.1,我們也很自豪地在規(guī)范公布同一天放出了自己的測試版驅(qū)動(dòng)程序?!?/p>
市場調(diào)研機(jī)構(gòu)Jon Peddie Research預(yù)測,OpenGL 3.1規(guī)范圖形硬件的安裝規(guī)模將超過1億。AMD、NVIDIA、S3 Graphics的顯卡驅(qū)動(dòng)目前都已經(jīng)支持OpenGL 3.0。
評論