比較DirectX和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、OS/2之間進行移植。因此,支援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圖形處理軟體也可以在微機上運用。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發展前景迷茫。

Open GL現狀

Open GL仍然是唯一能夠取代微軟對3D圖形技術的完全控制的API。它仍然具有一定的生命力,但是Silicon Graphics已經不再以任何讓微軟不悅的方式推廣Open GL,因而它存在較高的風險。遊戲開發人員是一個有著獨立思想的群體,很多重要的開發人員目前仍然在使用Open GL。因此,硬體開發商正在設法加強對它的支援。Direct3D目前還不能支援高階的圖形裝置和專業應用; Open GL在這些領域佔據著統治地位。最後,開放原始碼社群(尤其是Mesa專案)一直致力於為任何型別的計算機(無論它們是否使用微軟的作業系統)提供Open GL支援。

高階功能
OpenGL被設計為只有輸出的,所以它只提供渲染功能。核心API沒有視窗系統、音訊、列印、鍵盤/滑鼠或其它輸入裝置的概念。雖然這一開始看起來像是 一種限制,但它允許進行渲染的程式碼完全獨立於他執行的作業系統,允許跨平臺開發。然而,有些整合於原生視窗系統的東西需要允許和宿主系統互動。這通過下列 附加API實現:
* GLX - X11(包括透明的網路)
* WGL - Microsoft Windows

另外,GLUT庫能夠以可移植的方式提供基本的視窗功能。
DirectX
DirectX是一種應用程式介面(API),它可讓以windows為平臺的遊戲或多媒體程式獲得更高的執行效率,加強3d圖形和聲音效果,並提供設計 人員一個共同的硬體驅動標準,讓遊戲開發者不必為每一品牌的硬體來寫不同的驅動程式,也降低使用者安裝及設定硬體的複雜度。這樣說是不是有點不太明白,其實 從字面意義上說,Direct就是直接的意思,而後邊的X則代表了很多的意思,從這一點上我們就可以看出DirectX的出現就是為了為眾多軟體提供直接 服務的。

舉個例子吧,骨灰級玩家(玩遊戲比較長的)以前在DOS下玩遊戲時,可不像我們現在,安裝上就可以玩了,他們往往首先要先設定音效卡的品牌和型號,然後還要 設定IRQ(中斷)、I/O(輸入於輸出)、DMA(存取模式),如果哪項設定的不對,那麼遊戲聲音就發不出來。這部分的設定不僅讓玩家傷透腦筋,而且對 遊戲開發者來說就更頭痛了,因為為了讓遊戲能夠在眾多電腦中正確執行,開發者必須在遊戲製作之初,便需要把市面上所有音效卡硬體資料都收集過來,然後根據不 同的 API(應用程式設計介面)來寫不同的驅動程式,這對於遊戲製作公司來說,是很難完成的,所以說在當時多媒體遊戲很少。微軟正是看到了這個問題,為眾廠家推出 了一個共同的應用程式介面——DirectX,只要這個遊戲是依照Directx來開發的,不管你是什麼顯示卡、音效卡、統統都能玩,而且還能發揮更佳的效 果。當然,前提是你的顯示卡、音效卡的驅動程式也必須支援DirectX才行。

DirectX是由很多API組成的,按照性質分類,可以分為四大部分,顯示部分、聲音部分、輸入部分和網路部分。

顯示部分擔任圖形處理的關鍵,分為DirectDraw(DDraw)和Direct3D(D3D),前者主要負責2D影象加速。它包括很多方面:我們播 放mpg、DVD電影、看圖、玩小遊戲等等都是用的DDraw,你可以把它理解成所有劃線的部分都是用的DDraw。後者則主要負責3D效果的顯示,比如 CS中的場景和人物、FIFA中的人物等等,都是使用了DirectX的Direct3D。

聲音部分中最主要的API是DirectSound,除了播放聲音和處理混音之外,還加強了3d音效,並提供了錄音功能。我們前面所舉的音效卡相容的例子,就是利用了DirectSound來解決的。

輸入部分DirectInput可以支援很多的遊戲輸入裝置,它能夠讓這些裝置充分發揮最佳狀態和全部功能。除了鍵盤和滑鼠之外還可以連線手柄、搖桿、模擬器等。

網路部分DirectPlay主要就是為了具有網路功能遊戲而開發的,提供了多種連線方式,TPC/IP,IPX,Modem,串列埠等等,讓玩家可以用各種連網方式來進行對戰,此外也提供網路對話功能及保密措施。



DirectX並不是一個單純的圖形API,它是由微軟公司開發的用途廣泛的API,它包含有Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等多個元件,它提供了一整套的多媒體介面方案。只是其在3D圖形方面的優秀表現,讓它的其它方面顯得暗淡無光。DirectX開發之初是為 了彌補Windows 3.1系統對圖形、聲音處理能力的不足,而今已發展成為對整個多媒體系統的各個方面都有決定性影響的介面。
DirectX 是一組低階“應用程式程式設計介面 (API)”,可為 Windows 程式提供高效能的硬體加速多媒體支援。Windows 支援 DirectX 8.0,它能增強計算機的多媒體功能。使用 DirectX 可訪問顯示卡與音效卡的功能,從而使程式可提供逼真的三維 (3D) 圖形與令人如醉如痴的音樂與聲音效果。
   DirectX 使程式能夠輕鬆確定計算機的硬體效能,然後設定與之匹配的程式引數。該程式使得多媒體軟體程式能夠在基於 Windows 的具有 DirectX 相容硬體與驅動程式的計算機上執行,同時可確保多媒體程式能夠充分利用高效能硬體。
   DirectX 包含一組 API,通過它能訪問高效能硬體的高階功能,如三維圖形加速晶片和音效卡。這些 API 控制低階功能(其中包括二維 (2D) 圖形加速)、支援輸入裝置(如遊戲杆、鍵盤和滑鼠)並控制著混音及聲音輸出。構成 DirectX 的下列元件支援低階功能:

Microsoft DirectDraw
Microsoft DirectDraw API 支援快速訪問計算機視訊介面卡的加速硬體功能。它支援在所有視訊介面卡上顯示圖形的標準方法,並且使用加速驅動程式時可以更快更直接地訪問。 DirectDraw 為程式(如遊戲和二維圖形程式包)以及 Windows 系統元件(如數字視訊編解碼器)提供了一種獨立於裝置之外的方法來訪問特定顯示裝置的功能,而不要求使用者提供裝置功能的其它資訊。
--------------------------------------------------------------------------------
Microsoft Direct3D
Microsoft Direct3D API (Direct3D) 為大多數新視訊介面卡內建的 3-D 調色功能提供介面。Direct3D 是一種低階的 3-D API,它為軟體程式提供一種獨立於裝置之外的方法以便與加速器硬體進行有效而強大的通訊。Direct3D 包含專用 CPU 指令集支援,從而可為新型計算機提供進一步加速支援。
--------------------------------------------------------------------------------
Microsoft DirectSound
Microsoft DirectSound API 為程式和音訊介面卡的混音、聲音播放和聲音捕獲功能之間提供了連結。DirectSound 為多媒體軟體程式提供低延遲混合、硬體加速以及直接訪問聲音裝置等功能。維護與現有裝置驅動程式的相容性時提供該功能。
--------------------------------------------------------------------------------
Microsoft DirectMusic
Microsoft DirectMusic API 是 DirectX 的互動式音訊元件。與捕獲和播放數字聲音樣本的 DirectSound API 不同,DirectMusic 處理數字音訊以及基於訊息的音樂資料,這些資料是通過音效卡或其內建的軟體合成器轉換成數字音訊的。DirectMusic API 支援以“樂器數字介面 (MIDI)”格式進行輸入,也支援壓縮與未壓縮的數字音訊格式。DirectMusic 為軟體開發人員提供了建立令人陶醉的動態音軌的能力,以響應軟體環境中的各種更改,而不只是使用者直接輸入更改。
--------------------------------------------------------------------------------
Microsoft DirectInput
Microsoft DirectInput API 為遊戲提供高階輸入功能並能處理遊戲杆以及包括滑鼠、鍵盤和強力反饋遊戲控制器在內的其它相關裝置的輸入。
--------------------------------------------------------------------------------
Microsoft DirectPlay
Microsoft DirectPlay API 支援通過調變解調器、Internet 或區域網連線遊戲。DirectPlay 簡化了對通訊服務的訪問,並提供了一種能夠使遊戲彼此通訊的方法而不受協議或聯機服務的限制。DirectPlay 提供了多種遊說服務,可簡化多媒體播放器遊戲的初始化,同時還支援可靠的通訊協議以確保重要遊戲資料在網路上不會丟失。DirectPlay 8.0 的新功能即支援通過網路進行語音通訊,從而可大大提高基於多媒體播放器小組的遊戲的娛樂性,同時該元件還通過提供與玩遊戲的其他人對話的功能而使團體遊戲 更具魅力。
--------------------------------------------------------------------------------
Microsoft DirectShow
Microsoft DirectShow API 提供了可在您的計算機與 Internet 伺服器上進行高品質捕獲與回放多媒體檔案的功能。DirectShow 支援各種音訊與視訊格式,包括“高階流式格式 (ASF)”、“音訊-視訊交錯 (AVI)”、“數字視訊 (DV)”、“動畫專家組 (MPEG)”、“MPEG 音訊層 3 (MP3)”、 “Windows 媒體音訊/視訊 (WMA/WMV)”以及 WAV 檔案。DirectShow 還具有視訊捕獲、DVD 回放、視訊編輯與混合、硬體加速視訊解碼以及調諧廣播模擬與數字電視訊號等功能。

------------------------------------------------------------------------------------------------------------------------------------------------------
DirectX 的歷史
DirectX 1.0
第一代的DirectX很不成功,推出時眾多的硬體均不支援,當時基本都採用專業圖形API-OpenGL,缺乏硬體的支援成了其流行的最大障礙。
DirectX 1.0版本是第一個可以直接對硬體資訊進行讀取的程式。它提供了更為直接的讀取圖形硬體的效能(比如:顯示卡上的塊移動功能)以及基本的聲音和輸入裝置功 能(函式),使開發的遊戲能實現對二維(2D)影象進行加速。這時候的DirectX不包括現在所有的3D功能,還處於一個初級階段。
DirectX 2.0
DirectX 2.0在二維圖形方面做了些改進,增加了一些動態效果,採用了Direct 3D的技術。這樣DirectX 2.0與DirectX 1.0有了相當大的不同。在DirectX 2.0中,採用了“平滑模擬和RGB模擬”兩種模擬方式對三維(3D)影象進行加速計算的。DirectX 2.0同時也採用了更加友好的使用者設定程式並更正了應用程式介面的許多問題。從DirectX 2.0開始,整個DirectX的設計架構雛形就已基本完成。
DirectX 3.0
DirectX 3.0的推出是在1997年最後一個版本的Windows95釋出後不久,此時3D遊戲開始深入人心,DirectX也逐漸得到軟硬體廠商的認可。97年 時應用程式介面標準共有三個,分別是專業的OpenGL介面,微軟的DirectX D介面和3DFX公司的Glide介面。而那時的3DFX公司是最為強大的顯示卡製造商,它的Glide介面自然也受到最廣泛的應用,但隨著3DFX公司的 沒落,Voodoo顯示卡的衰敗,Glide接口才逐漸消失了。
DirectX 3.0是DirectX 2.0的簡單升級版,它對DirectX 2.0的改動並不多。包括對DirectSound(針對3D聲音功能)和DirectPlay(針對遊戲/網路)的一些修改和升級。DirectX 3.0集成了較簡單的3D效果,還不是很成熟。
DirectX 5.0
微軟公司並沒有推出DirectX 4.0,而是直接推出了DirectX 5.0。此版本對Direct3D做出了很大的改動,加入了霧化效果、Alpha混合等3D特效,使3D遊戲中的空間感和真實感得以增強,還加入了S3的紋理壓縮技術。
同時,DirectX 5.0在其它各元件方面也有加強,在音效卡、遊戲控制器方面均做了改進,支援了更多的裝置。因此,DirectX發展到DirectX 5.0才真正走向了成熟。此時的DirectX效能完全不遜色於其它3D API,而且大有後來居上之勢。
DirectX 6.0
DirectX 6.0推出時,其最大的競爭對手之一Glide,已逐步走向了沒落,而DirectX則得到了大多數廠商的認可。DirectX 6.0中加入了雙線性過濾、三線性過濾等優化3D影象質量的技術,遊戲中的3D技術逐漸走入成熟階段。
DirectX 7.0
DirectX 7.0最大的特色就是支援T&L,中文名稱是“座標轉換和光源”。3D遊戲中的任何一個物體都有一個座標,當此物體運動時,它的座標發生變化,這 指的就是座標轉換;3D遊戲中除了場景+物體還需要燈光,沒有燈光就沒有3D物體的表現,無論是實時3D遊戲還是3D影像渲染,加上燈光的3D渲染是最消 耗資源的。雖然OpenGL中已有相關技術,但此前從未在民用級硬體中出現。
在T&L問世之前,位置轉換和燈光都需要CPU來計算,CPU速度越快,遊戲表現越流暢。使用了T&L功能後,這兩種效果的計算用顯示卡 的GPU來計算,這樣就可以把CPU從繁忙的勞動中解脫出來。換句話說,擁有T&L顯示卡,使用DirectX 7.0,即使沒有高速的CPU,同樣能流暢的跑3D遊戲。
DirectX 8.0
DirectX 8.0的推出引發了一場顯示卡革命,它首次引入了“畫素渲染”概念,同時具備畫素渲染引擎(Pixel Shader)與頂點渲染引擎(Vertex Shader),反映在特效上就是動態光影效果。同硬體T&L僅僅實現的固定光影轉換相比,VS和PS單元的靈活性更大,它使GPU真正成為了可 程式設計的處理器。這意味著程式設計師可通過它們實現3D場景構建的難度大大降低。通過VS和PS的渲染,可以很容易的寧造出真實的水面動態波紋光影效果。此時 DirectX的權威地位終於建成。
DirectX 9.0
2002年底,微軟釋出DirectX9.0。DirectX 9中PS單元的渲染精度已達到浮點精度,傳統的硬體T&L單元也被取消。全新的VertexShader(頂點著色引擎)程式設計將比以前複雜得多, 新的VertexShader標準增加了流程控制,更多的常量,每個程式的著色指令增加到了1024條。
PS 2.0具備完全可程式設計的架構,能對紋理效果即時演算、動態紋理貼圖,還不佔用視訊記憶體,理論上對材質貼圖的解析度的精度提高無限多;另外PS1.4只能支援 28個硬體指令,同時操作6個材質,而PS2.0卻可以支援160個硬體指令,同時操作16個材質數量,新的高精度浮點資料規格可以使用多重紋理貼圖,可 操作的指令數可以任意長,電影級別的顯示效果輕而易舉的實現。
VS 2.0通過增加Vertex程式的靈活性,顯著的提高了老版本(DirectX8)的VS效能,新的控制指令,可以用通用的程式代替以前專用的單獨著色程 序,效率提高許多倍;增加迴圈操作指令,減少工作時間,提高處理效率;擴充套件著色指令個數,從128個提升到256個。
增加對浮點資料的處理功能,以前只能對整數進行處理,這樣提高渲染精度,使最終處理的色彩格式達到電影級別。突破了以前限制PC圖形圖象質量在數學上的精 度障礙,它的每條渲染流水線都升級為128位浮點顏色,讓遊戲程式設計師們更容易更輕鬆的創造出更漂亮的效果,讓程式設計師程式設計更容易。
DirectX 9.0c
與過去的DirectX 9.0b和Shader Model 2.0相比較,DirectX 9.0c最大的改進,便是引入了對Shader Model 3.0(包括Pixel Shader 3.0 和Vertex Shader 3.0兩個著色語言規範)的全面支援。舉例來說,DirectX 9.0b的Shader Model 2.0所支援的Vertex Shader最大指令數僅為256個,Pixel Shader最大指令數更是隻有96個。而在最新的Shader Model 3.0中,Vertex Shader和Pixel Shader的最大指令數都大幅上升至65535個,全新的動態程式流控制、 位移貼圖、多渲染目標(MRT)、次表面散射 Subsurface scattering、柔和陰影 Soft shadows、環境和地面陰影 Environmental and ground shadows、全域性照明 (Global illumination)等新技術特性,使得GeForce 6、GeForce7系列以及Radeon X1000系列立刻為新一代遊戲以及具備無比真實感、幻想般的複雜的數字世界和逼真的角色在影視品質的環境中活動提供強大動力。
因此DirectX 9.0c和Shader Model 3.0標準的推出,可以說是DirectX發展歷程中的重要轉折點。在DirectX 9.0c中,Shader Model 3.0除了取消指令數限制和加入位移貼圖等新特性之外,更多的特性都是在解決遊戲的執行效率和品質上下功夫,Shader Model 3.0誕生之後,人們對待遊戲的態度也開始從過去單純地追求速度,轉變到遊戲畫質和執行速度兩者兼顧。因此Shader Model 3.0對遊戲產業的影響可謂深遠。

顯示卡所支援的DirectX版本已成為評價顯示卡效能的標準,從顯示卡支援什麼版本的DirectX,使用者就可以分辨出顯示卡的效能高低,從而選擇出適合於自己的顯示卡產品。
DX版本最好更新為最新的。


哎!總結來說,一言以蔽之:DirectX是一個統一的API介面!而OpenGL即是一個介面還是個圖形庫!!
           

原文出處:

http://blog.csdn.net/jiangjunshow

留言