史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 應用軟體使用技術文件
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2005-04-01, 12:58 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 OpenGL簡介......

OpenGL簡介......


OpenGL是個專業的3D程序接頭,是一個功能強大,使用方便的底層3D圖形庫。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、OS2之間進行移植。

因此,支持OpenGL的軟體具有很好的移植性,可以獲得非常廣泛的套用。由於OpenGL是3D圖形的底層圖形庫,沒有提供幾何實體圖元,不能直接用以描述場景。但是,通過一些轉換程序,可以很方便地將AutoCAD、3DS等3D圖形設計軟體製作的DFX和3DS模型文件轉換成OpenGL的頂點陣列。

在OpenGL的基礎上還有Open Inventor、Cosmo3D、Optimizer等多種進階圖形庫,適應不同套用。其中,Open Inventor套用最為廣泛。


該軟體是關於OpenGL面向對象的工具包,提供新增交互式3D圖形應用程式的對象和方法,提供了預定義的對象和用於交互的事件處理模組,新增和編輯3D場景的進階應用程式單元,有列印對像和用其它圖形格式交換資料的能力。

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



995年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發展前景迷茫。
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
舊 2005-04-01, 01:06 AM   #2 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

圖形API兩強之爭DirectX vs. Open GL



不論是哪一種檔案類型的圖形晶片,總會支持某個版本的DirectX或OpenGL API,而支持哪一個API版本幾乎成為圖形產品分代的標誌。我們有必要先明確API的概念,API的全稱是「Application Programming Interface」,意為應用程式接頭,它是連接應用程式、操作系統和底層硬體的紐帶。通俗點說,API就是軟體函數的集合,這些預先編寫好的函數可以對硬體進行直接控制,它最大的優點就是通用性。


3D顯示卡剛剛誕生時,並不存在支持何種API的概念,如果某款遊戲要執行在不同的顯示卡平台上,開發商就必須為每個類別的顯示卡編寫一套程序,顯然這意味著巨大的精力損耗,同時也無法獲得令人滿意的效果。


因此早期顯示卡通常都有「遊戲相容性」的說法,遊戲產品同樣也有「顯示卡相容性」的概念,這有點類似於上世紀80年代之前的專用電腦時代:每個硬體平台都必須使用專用的軟體、不同廠商之間軟硬體不具通用性。

人們很早就意識到這個問題,對應的解決方案也被提出:制定一套操控硬體的圖形函數庫,圖形晶片製造商和遊戲開發商都嚴格遵循這套標準,這樣,圖形晶片製造商無需考慮什麼遊戲相容的問題,它只要根據函數庫提供的功能來開發產品就可以了;而遊戲開發商也不必為每款顯示卡都編程、只要直接使用這些標準化的函數庫即可實現廣泛的相容性。這套函數庫也就是所謂的圖形API。

目前,我們可接觸到的圖形API可分為OpenGL和DirectX兩大體系,前者是一項開放性的標準、主攻專業圖形套用和3D遊戲,由「OpenGL架構委員會」掌控,其成員包括業內各大廠商,目前主要推動標準發展的實際上司者是3Dlabs。



DirectX則是微軟制定的API標準,除了圖形API功能外,它還包含音瀕API等功能,只不過其圖形部分昇級最快、也最為人所知。DirectX針對的主要是娛樂套用,目前最新的DirectX 9 API功能極為強勁,大部分新3D遊戲都關於DirectX 9,而圖形晶片製造商更是將它作為標準、競相提供對DirectX 9的支持,是否支持DirectX 9也成為兩代顯示卡的分水嶺。

對顯示卡來說,API的重要性毋庸置疑,而未來每一次圖形技術的重大進步都將與API緊密相關,關注OpenGL和DirectX這兩種API無疑是非常必要的,從中我們可以瞭解它們的歷史、現狀和未來的發展,藉機瞭解整個圖形技術的發展狀況。

定位專業套用的OpenGL

OpenGL的英文全稱是「Open Graphics Library」,意為「開放的圖形程序接頭」。OpenGL的歷史可以追溯到上個世紀90年代初,標準誕生之後它一直佔據主導地位。


而微軟的DirectX出現的時間比OpenGL晚得多、功能也不及OpenGL,只不過最近幾年OpenGL因發展遲緩才被DirectX追上而已。儘管如此,OpenGL仍然是高端圖形API的代名詞,制定中的OpenGL 2.0以強勁的功能特性為業界矚目,而顯示卡製造商對OpenGL API的重視程度並未縮減,在可預見的將來,OpenGL還將引領專業圖形和3D遊戲的風潮。

OpenGL發展歷程

上個世紀90年代初,SGI公司出於製造圖形工作站產品的需要、開發出名為「IRISGL」的圖形API並成為工業標準。在當時,IRISGL的功能可謂十分強大,但它的可移植性卻相當之差。有鑒於此,SGI決定在IRISGL基礎上開發出一種功能類似、但可移植性更好的圖形API—這就是OpenGL。OpenGL被打造為開放性標準,任何軟硬體廠商均可自由使用,這讓它受到廣泛的歡迎。

1992年7月,SGI正式發怖OpenGL 1.0標準。OpenGL 1.0完全實現了SGI的預期設計目標:功能強大、移植性良好並能自由使用。隨後,SGI發起成立了「OpenGL架構委員會」(OpenGL Architecture Review Board,簡稱ARB)來共同管理和推廣這項先進的標準,OpenGL後繼標準的制定權也逐漸轉移給ARB組織。




在ARB內部,產生新標準的程序非常民主化:各成員以投票的方式來決定新版OpenGL標準應具有的功能特性,並據投票結果製作正式標準我的文件,各軟硬體廠商再根據這份標準我的文件的內容在自己的系統上實現;而所有的OpenGL版本都必須通過我的文件規定的全部測試項目方能生效。ARB組織的成員都非泛泛之輩,目前其核心成員包括SGI、3Dlabs、Intel、IBM、nVIDIA、ATi、Microsoft、Apple等業界領袖。

OpenGL 1.0獲得意料之中的巨大成功,專業圖形領域唯它馬首是瞻。看到這一點,微軟甚為心動,當時它正在開發的Windows NT系統如果獲得OpenGL的支持無疑會如虎添翼;而SGI也希望能夠讓OpenGL廣為流傳。


於是SGI和微軟進行首次合作、聯手將OpenGL 1.0移植到Windows NT平台。這項工作自然沒有什麼懸念,適用於NT的OpenGL 1.0順利推出,這使得Windows NT系統成為圖形工作站的又一個可選操作平台,很多執行於UNIX之下的專業圖形軟體也逐漸被移植,微軟和SGI都如願以償。

1995年,SGI推出了更為完善的OpenGL 1.1版本。OpenGL 1.1的效能比1.0版提高甚多,同時還加入了諸如頂點陣列、頂點位置、新紋理等新特性,並增強了元文件對OpenGL的使用等等。OpenGL 1.1同樣獲得了成功,而它也有對應的Windows NT版本。

1997年,受3D顯示卡的刺激,Windows 95平台下開始湧現出大量的3D遊戲,可微軟自己的Direct 3D 3.0圖形接頭極為糟糕,idSoftware公司的頂尖程序員John Carmack(Quake之父)嘲諷它簡直就是「支離破碎的API」。


很自然,強大的OpenGL成為取代DirectX的最佳選項。


但問題是微軟雖然在NT系統中引入了OpenGL,但其同時代的Windows 95卻無法支持OpenGL,面對這種局面,idSoftware公司聯合其它遊戲開發商強烈要求微軟在Windows 95中也引入OpenGL API,微軟也很瞭解自己的「Direct 3D 3.0」是什麼貨色、它很快就接受了這項建議。


而後,id公司開發出關於OpenGL的Quake2,想必有過3年以上遊戲玩齡的讀者都會記得Quake2那無以倫比的3D場景和激烈刺激的競技畫面。

而OpenGL API因此立下大功,幾乎所有遊戲開發商都轉向OpenGL,微軟後來也不得不順應潮流、在Windows95 OSR2版及Windows 98中正式支持OpenGL,相關遊戲開始大量湧現,而AutoCAD、3DS MAX、Maya等許多專業3D設計軟體也被移植到普通PC平台。



今天,預算有限的設計者可以在PC中執行這些軟體,莫不拜OpenGL所賜。

1999年,OpenGL再度發生變革,但這次它遇到的是發展史上的重大危機:SGI決定與微軟聯手開發下一代圖形接頭——Ferihant。Ferihant套用於Windows系統中,作為OpenGL和DirectX的取代者。為此,Ferihant將包含DirectX與OpenGL各自的優點,並加入場景貼圖之類的進階功能。



由於有了Ferihant,SGI停止了原先的Windows版OpenGL開發計劃,外界對此表示讚賞。然而Ferihant計劃沒進行多久,雙方的合作就出現裂痕,微軟不積極合作,光想把SGI的圖形技術並入DirectX的做法令SGI非常不滿,SGI隨後宣佈中止合作並撤回所有的開發人員,Ferihant遂告夭折。在這之後,OpenGL和DirectX似乎互不相干,繼續在PC平台上發展,但狀況對比鮮明:DirectX從此突飛猛進,而OpenGL卻長期原地徘徊。

2001年8月,ARB發怖OpenGL 1.3規範,它增加了立方紋理貼圖、紋理環境、多重採樣、紋理框架壓縮等增強指令,但是改工作度非常有限;2002年7月,ARB正式發怖OpenGL 1.4,它也只加入了深度紋理陰影紋理、頂點設計框架、自動紋理貼圖等簡單的功能,越來越落後於圖形硬體技術的飛速發展。而此期間DirectX突飛猛進,DirectX 8 API更是正式成為娛樂顯示卡的標準,id公司所形容的「支離破碎的DirectX」早已非吳下阿蒙,大量的3D遊戲轉向了DirectX體系。

OpenGL落後於時代並非ARB組織技術不佳,根本癥結在於確定OpenGL標準的民主機制:各成員通過投票表決。在實際操作中,這些成員往往關於自身利益而產生意見分歧,為了照顧多數人的利益OpenGL不得不變得複雜臃腫、開發進度緩慢。我們可以看到,在OpenGL 1.0之後的各個版本只是進行一些增強指令集的昇級,而它對顯示卡硬體中不斷湧現出的先進特性熟視無睹,同為ARB成員之一的微軟對此抱怨不已,後來它乾脆徹底拋開OpenGL、將全部精力投到自家的DirectX。大獲成功的DirectX 7、DirectX 8就是在此種背景下出現的。

2003年的7月,ARB公佈OpenGL 1.5規範——這也是迄今為止最新的OpenGL版本。OpenGL 1.5內包含ARB制定的「正式增強規格繪製語言」(OpenGL Shading Language v1.0),該語言用於著色對像、頂點著色、片斷著色等增強功能,同時也將作為下一代OpenGL 2.0版本的內核。OpenGL 1.5的變化還增加了頂點緩衝對像(可提高透視效能)、非乘方紋理(可提高紋理記憶體的使用效率)以及陰影功能、隱蔽查詢功能等等。

OpenGL 2.0:超強API現身

從ARB的慣例來看,劃時代的OpenGL 2.0很有可能在今年7到8月份現身。需要提及一點,OpenGL 2.0的主導者不再是SGI(SGI忙於公司內部調整無暇他顧)、而是著名的專業顯示卡提供商的3Dlabs。為了一舉改變OpenGL落後的狀況,3Dlabs協同其他ARB成員制定了雄心勃勃的OpenGL 2.0開發計劃。



據悉,OpenGL 2.0將在OpenGL 1.3基礎上進行修改擴充、但它將有下面五個方面的重大改進:

1複雜的核心被徹底精簡;

2完全的硬體可編程能力;

3改進的記憶體管理機制、支持進階像素處理;

4增強至數位媒體領域,使之跨越高端圖形和多媒體範疇;


5支持嵌入式圖形套用。

為了在獲得強大功能的同時保持理想的相容性,OpenGL 2.0將經歷以下兩個發展階段:第一個階段注重相容能力和平滑過渡,為此,OpenGL 2.0核心將在精簡後的OpenGL 1.3功能模組的基礎上加上可完全相容的新功能共同組成(圖1),這種做法在滿足相容性的同時,還可將原有OpenGL中數量眾多、且相互糾纏不清的增強指令進行徹底精簡。

第一階段的工作只是為了過渡,而第二階段才是OpenGL 2.0的真正成熟期。此時,ARB將合成出一個「純OpenGL 2.0」內核,純內核將包含更多新增加的「精簡型API函數」,這些函數具有完全的可編程特性、結構簡單高效、功能強大且套用靈活。除了完成這項工作外,ARB組織還得指導開發商拋棄繁瑣的OpenGL 1.X、轉用更具彈性的「純OpenGL 2.0」。

到這裡,非常有必要介紹所謂的「純OpenGL 2.0」有何不同之處,簡單點說,這個「純OpenGL 2.0」主要由新加入的功能和OpenGL 1.3的部分功能共同構成,它主要包含了完全可編程能力、改進的記憶體管理機制和OpenML數位媒體功能等至關重要的新特性。

DirectX 9 API中具有完備的可編程能力,這項特性最大的好處就是靈活性,遊戲開發商可根據自身需要靈活地製作出自己想要的圖形效果:
更高精度、更快速度還是在兩者間進行折衷。顯示卡廠商對DirectX 9的積極支持很大程度上就是因為這項可編程特性。現在,OpenGL 2.0也將具有完整的可編程能力,而它提供的功能超過了DirectX 9。OpenGL 2.0的可編程功能包括可編程頂點處理、可編程片段處理和可編程圖像格式三種:

● 可編程頂點處理:取代坐標轉換、材質應用程式及光照運算,允許對個別頂點作隨機運算;

● 可編程片段處理:取代材質存取、材質套用及霧化功能,允許個別片段的隨機運算;


● 可編程圖像格式:取代固定格式封裝和解封裝運算,並允許OpenGL在傳送或接收像素資料時、將檔案類型與格式進行任意組合。

OpenGL 2.0對OpenGL 1.X僵化的記憶體管理機制進行了改進:OpenGL 1.X的記憶體管理方式相當於黑箱作業,記憶體中的資料可被自動處理,應用程式無需瞭解運算結果和運算要花的時間,也無需控制儲存於空間分配及對象的存放,這種設計在當初是非常成功的,它將程序員從繁瑣的記憶體控制工作中解放出來。


但它的確無法有效控制對象的複製、搬移、移除或封裝程序,記憶體的利用效率變得頗為低下,成為顯示卡效能的一大制約瓶頸。


而OpenGL 2.0直接為這些資料對像建立了定位和連接的接頭,同時充分利用頂點陣列、圖像、材質、著色、顯示清單及像素緩衝區來對其作精確控制,此外OpenGL 2.0還採用了壓縮技術來減少資料的移動量。這些措施使OpenGL 2.0獲得了高效管理記憶體的能力,同時也保留了簡單易用的優點。

OpenML是一個針對數位視瀕、音瀕、動畫等多媒體功能的應用程式接頭,它原本由名為「Khronos Group」的機構掌管——有趣的是,這個機構的核心成員包含SGI、3Dlabs、Sun、Intel、Discreet、Evans、Sutherland、Pinnacle和RealViz。兩相對比,不難發現Khronos Group組織和ARB組織的成員有許多重合,將OpenML整合入OpenGL 2.0自然是順理成章。


而這也使得OpenGL 2.0成為集高端圖形、數位媒體於一身的超級應用程式接頭。這還不是全部,嵌入式設備對圖形套用的需求逐漸越來越為人關注,未來的掌上電腦、PDA甚至是手機都有可能使用3D圖形,而這些領域尚是一片空白,顯然極具發展潛力。



OpenGL 2.0將增加嵌入式圖形功能,而ATI近日推出的面向下一代手機、PDA和掌上電腦的「IMAGEON 2300」圖像處理器就是採用該項API技術,相信OpenGL 2.0很有機會成為該領域的主宰。

專注娛樂套用的DirectX

DirectX是微軟獨自開發的API,很多人認為它只是一個專門針對顯示卡的圖形API,其實不然。DirectX的服務範圍涵蓋圖形、輸入/輸出、音瀕、顯示、多媒體等等許多領域,元件包括Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等等,只是因圖形方面的套用最為重要而為人熟知,微軟近些年對DirectX作版本昇級也主要著眼於圖形領域。

DirectX的發展之路並不順利,在相當長的時間內都為軟硬體廠商所排斥,但在DirectX 7.0之後,它在人們心目中的形象逐漸被扭轉,而DirectX 8.0的優異表現令它具備了超越OpenGL的實力,目前的DirectX 9更一舉成為PC領域3D圖形API的主宰者。在介紹DirectX 9之前,我們有必要回顧一下DirectX的發展歷史。

DirectX發展歷程

1995年,微軟的第一個API——DirectX 1發怖。這個API極其簡單,它僅提供了對2D圖形和基本音瀕功能的支持,主要是為了彌補Windows 95對圖形管理的不足。




這完全可以理解,當時的在PC中還不存在3D遊戲,也沒有什麼3D顯示卡,對於面向商業用戶和家庭的PC而言3D功能也不是必要的。可想而知,DirectX 1幾乎毫無聲息,采不採用根本無關緊要。

1996年,DirectX的第二個版本DirectX 2推出。它引入了Direct3D技術、需要執行緩衝區,看起來與DirectX 1有了巨大的變化。DirectX 2採用平滑模擬和RGB模擬兩種方式來加速3D圖像產生;同時,原有的2D部分得到了有效增強、加入了2D動態效果,並更正了原有的一些bug。此外,DirectX 2的用戶設定程序也變得更加友好。



整個DirectX的設計架構基本確定,它也是如今的DirectX的雛形。Trident、S3公司開始支持DirectX 2,代表遊戲是《紅色警報》和《指令與征服》。

同年,DirectX 3發怖,不過它只是DirectX 2的簡單改進而已,對DirectSound和DirectPlay等功能作了些變動,總體來說還屬於功能簡單的DirectX 2技術體系。


微軟還發怖過DirectX 3.0a版本,它則是繼續修正錯誤的昇級版。DirectX 3還是有一定的擁戴者,nVIDIA Riva128和Intel的i740都支持它,代表遊戲包括《摩托英豪》和《極品飛車3》。

1997年,微軟發怖DirectX 5——DirectX 4被直接跳過。DirectX 5在技術上有了明顯提高,微軟對Direct 3D作了徹底修改:加入霧化效果、Alpha混合等特效,大大增強3D遊戲的真實感;加入S3的紋理壓縮技術,有效提高了顯示記憶體帶寬的利用率。



此外,DirectX 5在音瀕、遊戲控制方面均做了大量的改進,遊戲開放商的移植工作也變得更簡單,DirectX 5可以說是DirectX API技術成熟的標誌。nVIDIA RivaTNT支持DirectX 5,雖然nVIDIA當時尚未成為圖形業的霸主,但RivaTNT已展現出強勁的實力,DirectX 5規格應該說立下了一定功勞,而它的代表遊戲就是《古墓麗影3》。

這個時候,OpenGL已經在《Quake2》之類的3D遊戲中發揮威力,許多3D遊戲都選項了Quake2引擎,至少在純3D領域,OpenGL的影響力遠甚於DirectX 5。

1998年,DirectX 6推出。這個時候,DirectX已被許多廠商認可並成為2D遊戲和部分3D遊戲的標準API。DirectX 6的進步同樣顯而易見:可最佳化3D圖像品質的雙線性過濾、三線性過濾技術被引入,實現了多紋理、頂點緩衝和凸凹映射等功能。

nVIDIA的TNT2繼續對它提供支持,代表遊戲則是《極品飛車5》和《CS》。


但OpenGL的影響力仍大過DirectX 6,這很大程度上是受idSoftware的Quake Ⅲ遊戲影響,該款遊戲只能執行於OpenGL模式下。此外,關於Quake Ⅱ引擎的Counter Strike遊戲火爆一時並延續至今,這些遊戲在OpenGL模式下具有更理想的效能表現。這個時候,OpenGL還被廣泛認為優於DirectX 。

1999年,DirectX 7發怖——它也是DirectX API發展史上的轉折點。這個時候,nVIDIA已經取代3dfx成為圖形領域新霸主,它開創的GPU概念更是將對手遠遠拋到了後頭。GPU意即「圖形處理器」,專門負責3D遊戲中物體的幾何轉換和光源處理,此前這類工作是由CPU來完成的,GPU的概念堪稱圖形技術的里程碑:一方面,顯示卡擺脫了CPU的限制、可以自主決定系統的圖形效能;另一方面,CPU也從繁重的勞動中獲得解放、可將更多的運算力用於其他工作的處理。


第一枚GPU圖形晶片是nVIDIA的GeForce,微軟及時在DirectX 7中對其提供了支持:加入硬體幾何轉換與光源處理技術(即所謂的「硬體T&L」)以及貼圖的矩陣混合,自然,它獲得更廣的支持度。包括後來ATI的Radeon顯示卡也支持DirectX 7。

真正的質變發生在DirectX 8身上。DirectX 8於2000年推出,同DirectX 7相比,DirectX 8沒有硬體T&L的概念,取而代之的是具有可編程能力的Vertex Shader(頂點著色引擎)和Pixel Shader(像素著色引擎)。相比機械式的硬體T&L,Vertex Shader和Pixel Shader可提供更優異的效能,例如新增出水波紋的動態效果、衣物的褶皺及光線變化效果,這在以往根本不可能實現。


此外,DirectX 8在視瀕、音瀕等方面也有許多重要的改進,綜合實力全盤超越OpenGL,nVIDIA和ATI都將它作為標準的圖形API加以支持,OpenGL則退縮為它們的第二選項,對遊戲開發商而言也是如此。

2001年,微軟發怖DirectX 8的昇級版:DirectX 8.1,它將Pixel Shader的版本提高到1.4,同樣支持者趨之若鶩,直到今天DirectX 8.1還是中低端遊戲顯示卡的標準API,當前大量的3D遊戲和幾乎所有的2D遊戲都對它提供支持,當然,今後它的地位會慢慢被DirectX 9所接替。

DirectX 9介紹

DirectX 9是當前無可爭議的新一代圖形API標準,nVIDIA、ATI、XGI等圖形廠商都以它作為產品開發的指導方向,新一代遊戲也積極提供支持。


DirectX 9構建於DirectX 8.0/8.1,但它並不是功能上的小修小補,而是帶來了許多革命性的新特性。


這些新特性主要包括以下幾個方面:將頂點著色引擎、像素著色引擎昇級至2.0版本;浮點色彩處理的精度提高到128位(DirectX 8.0/8.1為32位);引入硬體位移貼圖的概念;支持40位真彩色;增加Z伽瑪修正和提供對剪裁平面技術的支持等等,下面我們將詳細向大家介紹這些新特性。

可編程的頂點著色引擎(Vertex Shader)和像素著色引擎(Pixel Shader)是DirectX 8引入的特性,它給遊戲開發商提供了更高的自由度和更容易實現的編程機制。對顯示卡而言,這是一個極富意義的重大進步。


不過,作為一項新功能,初期版本的頂點著色引擎和像素著色引擎都顯得不夠成熟,所以微軟在1.0版之後迅速推出1.1、1.3、1.4等多個版本,後續版本在功能上有所增強並修正了一些bug。



而DirectX 9將二者同時提升至2.0版本,頂點著色引擎2.0的主要改進是引入流程控制、增加條件跳轉、 循環和子程序等執行規則,最大指令數提高到1024條(DirectX 8.0/8.1為128條指令);而像素著色引擎2.0雖未能支持流程控制功能,但它的最大指令數也提升至160條。這些措施都使得顯示卡的可編程功能變得更加強壯。

128位浮點色彩處理也是DirectX 9最重要的改進之一,該項特效能有效減小3D畫面產生程序中難以避免的誤差,使得最終產生的3D畫面保持極高的色彩逼真度。


那麼,DirectX 9如何實現這一點呢?要回答這個問題,我們就應該從PC的色彩精度談起。

眾所周知,目前PC的色彩精度為32位,其中有8位Alpha值用於控制透明效果,而剩下的24位才真正用於物理色彩的顯示。因PC關於RGB(紅綠藍)三原色體系,24位由紅、綠、藍三個色彩通道分享、每通道8位色,因此PC實際上可以顯示出16.7 M種物理色彩。

如果單單用於靜態畫面顯示,這個數位應該是足夠用的,但在3D畫面產生的動態環境中就不同了。

每個色彩通道為8位精度、色彩的強度只有256種變化;而3D畫面產生往往需要幾十個光照計算和紋理計算,期間涉及到大量色彩值的轉換處理,如果這些中間值只能使用256種色彩狀態來儲存,誤差將不可避免;經過幾十步計算之後,原本可忽略的色彩誤差會被明顯放大,導致螢幕上產生的3D畫面出現嚴重的色彩失真。

DirectX 9引入的128位浮點色彩處理機制可以很好地解決這個問題:
每個色彩通道可獲得32位精度,顏色總數達到232種(超過4億種),誤差值可被降低到很低的水準。

從這個意義上說,所有符合DirectX 9規格的顯示卡在配合支持DirectX 9的3D遊戲時可獲得更真實的色彩表現,而DirectX 8.0/8.1平台就無法實現這一點。


不過,128位色彩精度意味著要處理的資料量劇增,這就對圖形晶片的能力提出了更高的要求,幸虧顯示卡硬體的超快發展速度提供了足夠的保障。

DirectX 9的靜態色彩顯示機制同樣發生了改變:32位色、每色彩通道8位精度是業界基準,對普通辦公娛樂而言足夠應付,但在專業圖形處理場合,每通道區區8位精度是絕對不夠的,微軟一直期望DirectX向專業套用進軍,提高色彩精度勢在必行。

根據這一要求,DirectX 9引入40位真彩色機制:每個色彩通道和Alpha通道的精度都提高到10位,可顯示的物理色彩總數達到30位、也就是超過10億種色彩!

我們可以從圖中清楚看到40位色與32位色的區別:40位色顯示的灰度過渡非常平滑、近乎是無縫進行的;而32位色的灰度過渡存在明顯的間隔。

要真正在實用中實現40位色顯示,除了需要支持DirectX 9 的顯示卡外,還需要操作系統和顯示器的支持。操作系統方面估計得等到微軟的Longhorn發怖;至於顯示器就更成問題:CRT對色彩數沒有限制,但它目前已逐步被淘汰,現有的LCD顯示器只能顯示出18位色。


幸好,微軟和夏普聯合進行新一代LCD顯示器的研發,估計2005年我們就可看到支持40位色的高品質LCD顯示器出現。

環境凹凸貼圖是Matrox當年在G400引入的技術,它通過單純的模型貼圖使3D場景變得更加真實。現在DirectX 9引入了更先進的位移貼圖(Displacement Mapping)功能,它的開發者仍然是Matrox,在Parhelia-512(幻日)顯示卡中得以實現。和凹凸貼圖相比,位移貼圖實現起來更複雜:它使用一張基本紋理、一張光照紋理以及一張最為重要的高程紋理來完成模型外觀的修飾。


即便所使用的模型只是普通的平面,在經過位移貼圖的精細處理之後,這個模型就可以演變產生一個逼真複雜的地貌環境,對需要繪圖複雜場景的3D遊戲而言,這項功能無疑是如虎添翼。微軟為DirectX 9設定了兩個版本的位移貼圖功能:


一個是為多數廠商選用、名為「預計算/預描繪」的標準版本,其特點是處理速度快、但無法進行自適應紋理鑲嵌和細節處理技術(Levels-of-Detail,LoD),在苛求精美畫面的場合難以發揮效用;另一個則是供Matrox顯示卡獨家使用的採樣位移貼圖(這估計是微軟對Matrox在位移貼圖中所作貢獻的一點回饋),它可支持自適應紋理鑲嵌和細節處理技術,在地形產生中表現最為出色,而且使用的方法比較簡單,但其缺陷是速度比較慢。


因Matrox的Parhelia顯示卡基本上在娛樂市場完全失敗,採樣位移貼圖也形同虛設,或許微軟會將它取代精度不佳的標準版本也說不定。

在3D物體的表面處理方面,硬體位移貼圖的效果要比環境凹凸貼圖更為精美,我們不妨用下面這個例子來說明它與凹凸貼圖的差別:

在圖的三個球體中,第一個是沒有經過處理的原始圖像;

第二個是經過凹凸貼圖處理的球體,它的表面能表現出一定的立體感,不過還不是太明顯;而第三幅則是經過DirectX 9的硬體位移貼圖產生的圖形,其表面貼圖的立體感相當強烈、極具真實感。

DirectX 9引入的伽馬修正功能著眼於2D3D場景的色彩調節,以獲得良好的視覺感受。


雖然我們在Photoshop等專業作圖軟體中就可獲得伽馬修正功能,但這只涉及對2D圖像的色彩調節,只有那些昂貴的專業級圖形工作站才可能擁有針對3D程序的「Z伽馬修正」功能。而DirectX 9改變了這一切:未來的2D3D程序均可支持伽馬修正,從而提供更完美的視覺效果。

DirectX 9的平面剪裁技術則是通過切除不必要的圖形運算來提高效能,其實這一點都不新鮮,在STM Kyro顯示卡家族中我們就可以看到類似的隱面去除(HSR)技術,二者都是將螢幕不可見的部分「剪掉」,讓顯示卡不用處理這部分的內容,以此減輕顯示卡計算量並提高效能。



不過,與隱面去除有所差別:DirectX 9的平面剪裁不僅可用於3D處理,還適用於多視窗開啟或視瀕內容剪輯,不過這看起來沒什麼太大作用,畢竟2D環境基本不耗費多少硬體資源。

未來:OpenGL、DirectX並行發展

作為兩大圖形API陣營,OpenGL和DirectX在各自的發展中形成鮮明的特點:即便處於目前的低潮狀態,OpenGL仍然牢牢把持著專業繪圖領域,而DirectX在此毫無競爭力,功能更強大的OpenGL 2.0無疑將繼續保持壟斷性地位。但在3D遊戲領域,OpenGL的確是處於弱勢地位,但它也沒有丟光所有的市場,若OpenGL 2.0表現理想,重新贏得廣泛支持也並不困難。




而DirectX 9已經牢牢在遊戲中站穩了腳跟,憑借領先的功能特性和微軟在操作系統方面的先天優勢,DirectX 9及未來的DirectX 10理所當然會成為多數遊戲開發商的首選,它的套用範圍除了3D遊戲還涵蓋2D遊戲領域,這正是OpenGL所欠缺的。

其實,OpenGL和DirectX並不是完全對立的,二者存在一定的競爭又需要進行相互協作, ARB公佈OpenGL 2.0的改進和開發計劃後,微軟表現出異乎尋常的興趣,而ARB的各個成員也在3Dlabs的帶領下拋開分歧進行緊密的合作;各成員表示未來將專注於實現OpenGL 2.0的開發目標,而不再會為了自身利益讓OpenGL變得一團糟,就連一向針鋒相對的nVIDIA與ATI也致力於彼此技術的整合。ARB集體宣誓:「所有送至OpenGL的創意想法,一經採用,便免費公開給所有人使用。」相信這種開放性的做法有助於OpenGL在技術上繼續保持領先。至於DirectX體系,微軟一直沒有放棄進入高端的想法,但它注重的還是PC娛樂平台,在下一代DirectX版本中,我們可以看到更多更先進的功能特性,相信這也將繼續成為圖形業發展的指導方向——當然這只是針對PC而言。



API規格與顯示卡的效能

支持何種API是顯示卡分代的標誌,這在DirectX規格上體現得極為明顯。許多用戶往往認為支持DirectX高版本的顯示卡可以提供更理想的效能,其實這是一個誤區。


我們知道,API只是函數的集合,它自身不決定任何東西,只是充當遊戲和顯示卡硬體之間的媒介、讓遊戲和顯示卡都不需要為相容性問題而煩惱。


而不同版本API的區別在於函數庫的差異,高版本的API總是提供數量更多、功能更強的函數,遊戲開發商利用這些函數可以創造出各種各樣的特效。


如果圖形晶片可對此API提供支持,那也就意味著關於該圖形晶片的顯示卡可以將這些遊戲特效完美展現出來,無法支持該API的圖形晶片將無法識別遊戲特效使用的函數庫,自然就無法正常執行。

但API自身與圖形晶片的硬體效能沒有任何關係,圖形晶片的效能取決於其核心設計和執行頻率,API只是提供功能方面的支持而已,所以認為具備高版本API支持的顯示卡一定比採納低版本API的顯示卡速度快是沒有道理的,舉個例子,支持DirectX 8的GeForce4 Ti4600肯定比支持DirectX 9 API的GeForce FX5200速度更快,當然,我們可以說高版本API支持總是比較「好」的,因為它可以支持更多的新遊戲。


3dfx Glide的崛起與衰落

3dfx是電腦3D時代的開創者,1995年11月,3dfx推出Voodoo加速卡。憑借令人驚歎的3D效果,Voodoo得以風靡市場、最終成為不朽的神話。


3dfx迅速發展壯大並在1997年達到最巔峰。為了配合自己的硬體技術,3dfx推出專門針對Voodoo系列的API:Glide。Glide提供了完整的三維圖形開發環境,開發者可以使用其最高層的API新增和操作各種複雜的三維對象。


Glide支持立即模式和駐停留模式,前者與OpenGL類似、需要向圖形晶片提供畫圖指令,優點是可提供精細的控制;後者則採納面向對象的編程結構,場景幾何資料被儲存於到一個對像資料庫中,程序員無需掌握三維對像內部結構的知識就可以通過對像使用來進行各種各樣複雜的操作、具有優良的易用性。



此外,Glide支持Voodoo提供的一系列先進硬體特性,例如鏡面高光、阿爾法透明處理、動畫貼圖、反鋸齒等等。由於功能強大、穩定性和易用性都相當出眾,Glide被認為是當時最理想的3D圖形API,加上3dfx在圖形行業的霸主地位,各遊戲開發商順利成章地選項Glide來開發產品,所以在當時,幾乎所有的3D遊戲都是以Glide作為基準,而它也確實不負眾望。

不過,Glide有一個致命的缺陷:它是3dfx專內容的圖形接頭,其他圖形晶片製造商無法對其提供支持,導致nVIDIA、Matrox、S3等競爭對手選項了微軟的DirectX API。雖然一開始DirectX功能簡單、設計糟糕,但在3.0版之後,DirectX逐漸變得成熟,越來越多遊戲開始對其提供支持。


由於人所共知的原因,3dfx在1997年之後迅速沒落,專用的Glide API已經對遊戲開發商毫無吸引力,這個時候,Glide逐漸被拋棄、慢慢消失在人們的視野中。1999年12月,困境中的3dfx終於決定將Glide完全公開,但這個時候已經沒有多少人對它感興趣了,強大的OpenGL和成熟中的DirectX成為遊戲開發商的新寵。
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 09:27 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1