概述
DirectX 6之前,在Windows 3.1至Windows 98SE之間,曾有WinGAPI的出現。而DirectShow亦已自原本的DirectX SDK中移到Windows平台SDK了。Redist Package是媒體開發底層API,通過它可以開發遊戲和其它多媒體應用程式。DirectX是一種應用程式界面(api),可讓以Windows為平台的遊戲或多媒體程式獲得更高的執行效率,加強3d圖形和聲音效果,並提供設計人員一個共同的硬體驅動標準,讓遊戲開發者不必為每一品牌的硬體來寫不同的驅動程式,也降低用戶安裝及設定硬體的複雜度。
下面我們來舉個例子說明Directx的作用:以前我們玩Dos遊戲的時候,都必須設定音效卡的品牌,然後再設定它的irq、i/o、dma,其中有一項設定不對遊戲就發不出聲。這部分設定不但讓玩家傷透腦筋,對遊戲設計者開說也非常頭痛!因為遊戲設計者做遊戲之初便需要把市面上所有音效卡硬體數據都收集過來,然後根據不同的api來寫不同的驅動程式。
現在我們玩Windows遊戲,並不會做這些設定,因為Directx提供了一個共同的應用程式界面,只要這個遊戲是依照Directx來開發的,不管你是什麼顯示卡、音效卡、統統都能玩,而且還能發揮比Dos下更佳的效果。當然,前提是你的顯示卡、音效卡的驅動程式也必須支持Directx才行。
前面所說的只是提供一致的應用程式界面,其實要深入了解Directx的各個組件你就會更加明白為什麼遊戲都要支持Directx了。Directx由許多api組成,我只介紹幾個重要的部分。
組件
DirectX組成的組件有:1、DirectDraw:這是Directx中非常重要的部分。它擔任圖形處理的關鍵。以往在實地址的Dos下設計遊戲時,為了遊戲速度的考慮,都讓程式直接操作硬體。而在Windows98這種保護模式下,所有圖形的訪問動作都必須gdi這個圖形處理中心來處理,而不能直接對硬體下命令,而gdi對連續的畫面處理不佳,遊戲一旦通過gdi來處理的話,那么效果不佳。
DirectDraw就是來幫助windows程式也能直接進行硬體操作,更進一步還能加速顯示卡的速度,使遊戲更為流暢。另外DirectDraw還支持mmx、3dnow、agp等技術,還能處理多螢幕顯示,讓視窗環境的遊戲更加多姿多彩。
2、DirectSound這是用來處理聲音的api,除了播放聲音和處理混音之外,還加強了3d音效,並提供了錄音功能。前面所舉的音效卡兼容的例子,就是利用了DirectSound來解決的。
3、DirectInput這用來處理遊戲的一些外圍裝置,例如遊戲搖桿、gamepad、方向盤、vr手套、力反饋的各種設備等。以往要在Dos下用方向盤來玩賽車遊戲,就要先調整好irq、dma等各種設定。而現在DirectInput則使這些設備與遊戲配合良好,不需要做特別配置。
4、DirectPlay這是為了滿足近來流行的網路遊戲而開發的api,支持多通信協定,讓玩家可以用各種連網方式來進行對戰,此外也提供網路對話功能及保密措施。
5、Direct3D(D3D):d3d的大名相信誰都聽過吧!對現在的遊戲來說d3d實在是太重要了!由於3d遊戲的興起,各大廠商紛紛推出3d加速卡為了避免重蹈音效卡的覆轍,微軟從Directx3.0後加入d3d這個api,讓3d遊戲有一個共同的開發標準。這樣當遊戲再執行時若需要繪圖時就會通過d3d向顯示卡驅動程式提出要求從而完成繪圖。
兼容性
硬體製造商要為每款硬體產品編寫驅動程式來支持DX,甚至一些硬體商只編寫DX的驅動,這意味著要使用這款硬體就必須安裝DX,早期的DirectX版本自帶了所有支持DX硬體的驅動程式,後來用戶可以通過自動更新系統下載適合的驅動。一些驅動只支持某個版本的DX,DX10之前,所有DirectX版本都保持向後兼容性,即新版本兼容舊版本,例如安裝了DX9的電腦,依然可以運行由DX6編寫的遊戲。
版本開創歷史
1994年末,微軟即將推出新一代作業系統Windows 95。決定新作業系統的最終價值的因素在於究竟新系統能運行哪些程式。微軟的三個員工:Craig Eisler、Alex St. John、Eric Engstrom十分關心這個問題,因為不少遊戲程式設計師更喜歡在DOS系統下編寫遊戲,這意味著,沒有多少人願意為WIN95編寫遊戲,新作業系統不會獲得多少成功。 DOS允許直接訪問顯示卡、鍵盤、滑鼠音效卡以及其他系統硬體設施。而Windows 95出於保護存儲系統的目的,限制了對硬體的直接訪問,取而代之的是一套更加規範標準的訪問方法。微軟需要一種方法讓程式設計師在WIN95中也能編寫出高效的程式。此時,離新系統發布不到幾個月了。St. John和Engstrom聯合解決了這個問題,他們將解決方案稱為DirectX。DirectX的第一個版本作為Windows Games SDK發布於1995年9月,它作為Windows API的一部分用以替換Windows 3.1中的DCI和WinGAPI。ATI的一個開發團隊為微軟帶來了基本的遊戲圖像技術,微軟方面,DirectX由專門的團隊負責開發,Eisler為團隊領導,而St. John和Engstrom則成為主程式設計師。
DirectX出現之前,微軟已經將OpenGL包括在Windows NT系統中,而在當時,OpenGL對硬體要求嚴苛,這限制了一些工程師和CAD用戶。Direct3D就作為OpenGL的代替品被加入DirectX。隨著硬體技術的發展,OpenGL成為行業標準,一場“戰役”發生在DirectX的支持者和OpenGL的支持者之前,而且前者只支持Windows平台,而後者支持多平台。在實際套用中,遊戲開發者常常兩者同時使用,因為DirectX支持許多OpenGL所不支持的功能,比如音效和輸入裝置。而選擇混合使用OpenGL和OpenAL的隊伍也在壯大。
由此派生出的“特別DirectX”也作為微軟Xbox和Xbox 360的圖形API,這套API由微軟和NVIDIA公司共同開發,Xbox API和DirectX 8.1比較相似,但不能升級更新,Xbox本版也叫做DirectXbox,但由於商業銷售緣故,還是被簡稱為Xbox。
2002年,微軟發布了DirectX 9,它支持最新的頂點陰影著色器2.0版本,又於2004年4月將shader model 3.0(SM 3.0)加入了DirectX 9.0c。
2005年4月,DirectShow從DirectX移除,加入到Microsoft Platform SDK。
.NET Framework
2002年間,微軟發布了一個兼容.NET Framework的DX版本,因而允許程式設計師充分利用.NET的特性編寫DX程式,這套API被稱為Managed DirectX(MDX)2005年12月、2006年2月、4月、8月,微軟相繼發布DirectX的更新版本,使之支持.NET 2.0框架。然而.NET 2.0版本至今只是個測試版。
GDC 2006期間,微軟推出了XNA框架,一個基於Managed DirectX,幫助程式設計師更輕鬆的編寫遊戲的框架,將DirectX,高級著色器語言(HLSL)以及其他工具集成到一起。2006年12月11日,微軟對Windows XP提供免費的XNA Game Studio Express RTM的下載服務。
DirectX 10
Windows Vista是DirectX 10唯一支持的作業系統,比起之前的版本,DX10做了重大的變動:DirectInput將被XInput替換,DirectSound將被XACT替換。DirectX 10也減少了對音效硬體加速的支持,更多的使用CPU來運算音效。亦有謠言說微軟打算發布一個補丁包使DX10支持XP,以此讓更多的XP用戶購買Vista。Direct3D 10.1是DirectX 10的改進版,隨Vista SP1出貨。