|
論壇說明 | 標記討論區已讀 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2005-03-29, 04:09 AM | #1 |
榮譽會員
|
DirectX--昨天、今天、明天
現在遊戲的種類與數量幾乎呈爆炸式增長,遊戲的製作水準也不斷提高,那麼玩家在欣賞遊戲中那絢麗的效果時,有沒有想過是什麼造就了這一切呢?
這就是DirectX!DirectX這個詞對玩家來說似乎並不陌生,現在的很多遊戲說明裡都有「該遊戲需要DirectX….以上版本支持」此類的話,甚至3DS Max啟動時的加速模式選項中也有DirectX身影。那麼DirectX究竟是什麼呢?現在就讓我們揭開它面上這層神秘的面紗,一探究竟吧。 一、初識DirectX DirectX是Microsoft開發的關於Windows平台的一組API,它是為高速的既時動畫繪圖、交互式音樂和環境音效等高要求套用開發服務的。從Windows 95開始,人們就開始接觸DirectX2.0,WindowsNT4.0里面則是DirectX3.0a,但是沒有DirectX4的版本。到了Windows98,它就是Windows家族操作系統中不可缺少的核心成員之一。Windows 98中整合了DirectX5,Windows2000中整合了DirectX 6,Windows Me中整合了DirectX 7,而Windows XP天生就帶了DirectX 8.1。 微軟開發了DirectX標準平台,並且根據硬體製造廠商和遊戲廠商合作共同更新昇級DirectX的標準。硬體製造商按照此標準研發製造更好的產品,遊戲開發者根據這套標準開發遊戲。 也就是說,無論硬體是否支持某種特效,只要DirectX標準中有,遊戲開發者就可以把它寫到遊戲中,當這個遊戲在硬體上執行,如果此硬體根據DirectX標準把這個效果做到了此硬體驅動程式中,驅動程式駕馭其硬體算出結果,用戶就可以欣賞到此效果。這就是「硬體設備無關性」,是DirectX真正意義所在。 通常,Windows對硬體訪問的管制非常嚴格,用通常的辦法不易訪問,但DirectX通過「硬體抽像層(HAL)」給予了開發人員直接訪問硬體的能力,HAL不僅解決了硬體及相容性問題,而且開發人員可以利用它直接訪問電腦的某些硬體設備,例如顯示設備的直接顯示記憶體控制和繪圖,鍵盤、滑鼠和遊戲桿的控制的直接訪問控制,音瀕設備的直接音瀕混合與輸出能力等等,因此開發人員可以充分利用硬體加速將程序的效能最佳化到一個新的高度,如果目標機器不支持相應的硬體加速,DirectX還可以模擬加速器以提供強大的多媒體環境。DirectX家族包含的成員有Direct3D、DirectDraw、DirectInput、DirectMusic、DirectPlay、DirectSound和DirectShow。 * 完全整合DirectDraw與Direct3D 簡化程序啟始化程序並提高資料分配和管理的效能,這將減少記憶體消耗。 同時,整合後的圖形套用編程接頭(API)允許並行的頂點輸入流以達到更加靈活的繪圖。 * 可編程頂點處理語言 允許你編寫設定的著色器,如變形和漸變動畫,矩陣調色板蒙皮,用戶定義的光照模型,一般環境映射,可編程幾何體或者任何其他開發者定義的算法。 * 可編程像素處理語言 允許你編寫設定的硬體著色器,例如通用紋理組合公式,逐像素光照(凹凸貼圖),適用於實現照片(真實)級鏡面效果的逐像素環境貼圖或者任何其他開發者定義的算法。 * 支持多重採樣繪圖 允許全場景反走樣和多重採樣效果,例如運動模糊及景深(鏡頭的聚焦效果)。 * 點精靈 允許高效能的粒子系統繪圖,例如火花、爆炸、雨、雪等等。 * 3-D空間紋理 允許範圍衰減,實現逐像素級光照及空間大氣效果,甚至是更複雜的幾何圖形套用。 * 支持高維圖元 對來自主要的3-D創作工具的3-D內容,增強其外觀並簡化內容映射。 * 進階技術 包含了用於輸出Direct3D蒙皮網格的三維內容新增工具插件,使用了Direct3D多種不同技術,多解析度層次細節(LOD)幾何,還有高維表面資料。 * 索引頂點混合 增強了幾何混合的支持,允許通過指定使用一個矩陣索引把矩陣套用於頂點混合處理。 * 擴充了Direct3DX實用庫 包含了大量的新函數。Direct3DX實用庫是一個位於Direct3D之上的輔助層,用於簡化3-D圖形開發者的一般工作。它包括了一個蒙皮庫,支持對網格的操作,還有組裝頂點與像素著色器的功能。 DirectX每一次昇級都會有重大的內核結構改變,它會給我們帶來巨大的視覺衝擊。 DirectX7核心的T&L引擎到DirectX9乾脆被拋棄了。因此對於圖形晶片開發商、遊戲開發商以及廣大用戶而言,DirectX 9的確是一項「絕無僅有的優越圖形技術」。DirectX 9「具有多項令人興奮的全新功能特徵」: 二、DirectX全家福 通過上面的介紹,相信讀者對DirectX已經有一個大概的瞭解。下面就讓我們逐一認識它們吧。 1、Direct3D、DirectDraw和DirectGraphics DirectDraw是DirectX家族中的元老,它為高速的2D繪圖提供了良好的支持,由於其具備直接顯示記憶體訪問和位快傳送的能力,使得2D圖形的繪製速度相對GDI有了一個質的飛躍,其繪圖速度甚至有上百倍的差距。 在現在回憶當初玩「紅色警戒」和「Diablo」的時候,大家可不要忘了DirectDraw的功勞。 DirectDraw在DirectX3.0時就已經接近極致,但是隨著PC圖形技術的飛速發展,人們逐漸不再滿足於2D的圖形效果,而通過2D技術實現偽3D模擬又非常損失效率,這種需求直接導致了Direct3D的誕生,早期的Direct3D技術不甚完善,相對於2D技術還有一定的差距,直到圖形加速卡支持硬體3D特效後,Direct3D才逐漸步入正軌,慢慢顯示出它的效能優勢來。下面讓我們來回顧一下歷史,看看 Direct3D的「成長程序」: DirectX6中的Direct3D增加了如下新特性: * 幾何形體的靈活頂點格式定義 * 幾何形體的頂點緩衝儲存於 * 支持多紋理繪圖 * 自動紋理管理 * 可選深度緩衝(使用Z Buffer或W Buffer) * 通過凹凸環境貼圖(BUMPENVMAP)為反光面和水波特效提供逐像素的繪圖和貼圖能力 DirectX7中的Direct3D增加了以下新特性: * 硬體坐標轉換和燈光(T&L)支持 * 立方體表面的環境貼圖 * 幾何繪圖 * 改進的紋理繪圖 * 自動紋理坐標產生、紋理轉換、投影紋理和任意面裁剪 * D3DX實用庫 * 支持Intel MMX架構、Intel單指令多資料流(SIMD)、SSE?和 AMD? 3DNow?架構。 DirectX的版本到了8.0的時候,雖然它依然保持著向前的相容性,但是它的結構發生了巨大的變化,3D圖形處理技術逐漸統一在Vertex Shader和Pixel Shader。Vertex Shader被用來描述和修飾3D物體的幾何形狀,同時也用來控制光亮和陰影;Pixel Shader則用來操縱物體表面的色彩和外觀。Direct3D和DirectDraw合二為一,DirectX家族誕生了一個新的成員-----DirectGraphics。同時也增添了很多令人激動的特性: |
送花文章: 3,
|
2005-03-29, 04:13 AM | #2 (permalink) |
榮譽會員
|
Direct3D圖形繪圖管道
* Vertex Shader 2.0和Pixel Shader 2.0 在DirectX9中,Vertex Shader和Pixel Shader的版本昇級到了2.0,它們都支持64或甚至128位浮點色彩精度。浮點色彩在動態和精度上的增加給圖像品質帶來質的飛躍,這樣在DirectX9中你可以輕易實現電影等級般逼真的效果! DirectX8和DirectX9的對比參數: Vertex Shader 2.0引入了流程控制,增加了條件跳轉、循環和子程序。Vertex程序現在最多可以由1024條指令組成(之前只能用128條指令),增加的指令帶來更加複雜和強大的表現,新的操作如正弦、餘弦及其他強大的函數運算大大簡化了程式碼的編寫,並且能夠表現更加複雜的效果。 Vertex Shader 1.0 **************************VertexShader 2.0 強大的可編程Pixel Shader是實現具有電影品質等級效果的真正精華所在。Pixel Shader 2.0可以支持進階程序語言和彙編語言,開發人員還可以將其彙編程式碼嵌入較進階的程序語言中。前一版的Pixel Shader語言被限制為只能使用最多6個材質和28條指令,而2.0版則將這一上限提升至最大16材質和160條指令,也新增了很多強化的運算和操作。 Pixel Shader 1.4 Pixel Shader 2.0 此外各種Shader工具的大力協助,如nVidia的Cg語言和ATI的RenderMonkey,使得既時圖形繪圖的品質飛速提高,nVidia和ATI官方的Demo就足以說明這一點。DirectX9中也改進了部分接頭定義,Vertex Shader和Pixel Shader分別單獨提供了一個接頭,而且提供了一般圖形的繪製接頭,如線段的繪製等,這進一步減輕了開發人員的負擔。 * 浮點型色彩和32位畫格緩衝格式 目前大多數色彩表示法(如RGB)用8位整數表示紅、綠、藍色,也許對於顯示來說這已經足夠了,但在運算中似乎還遠不夠。由於整數沒有小數部分,因此當它們經過Pixel Shader極其複雜的數學運算後,就會產生較大的誤差,這可能導致色彩明顯失真。而DirectX9支持數種浮點色彩格式,使得其精度有了很大提高。同時DirectX9支持精確到每像素32位的畫格緩衝格式,能夠表現出4倍於目前亮度等級的數量,這使得圖像看上去更加清晰和自然。 除此以外,DirectX9還提供位移貼圖(displacement maps)以及改進的設備模擬等特性的支持,並且毫無意外地,DirectX9 SDK中也進一步增強了Direct3DX實用庫,提高了開發效率。 |
送花文章: 3,
|
2005-03-29, 04:17 AM | #3 (permalink) |
榮譽會員
|
2、DirectSound、DirectMusic和DirectX Audio
在DirectX中DirectSound和DirectMusic可以統稱DirectX Audio。一個好的遊戲是不能沒有聲音的,DirectX Audio負責了遊戲中的音效控制。不僅僅是遊戲,很多需要高品質音效的地方都有它們的影子,我們經常在一些播放軟體的設定面板中看見是否使用DirectSound支持的選項。 DirectX Audio做的不僅僅只是簡單地對聲音的回放。它提供了一個完整的系統,能夠利用硬體加速的功能動態地操縱控制音軌和聲道(soundtrack)。 如果你想在你的程序中使用DirectMusic和DirectSound,你就能夠獲得以下功能: * 讀入且播放例如MIDI, WAVE, 以及DirectMusic Producer run time等格式的聲音文件。 * 同時對多個聲音資源進行混音播放。 * 對播放的聲軌進行高精度時間控制。 * 可以動態地變更播放節拍與節奏,甚至既時地動態控制一些MIDI事件。 * 使用DLS合成器(DirectX Audio原有的的波表合成器),你的程序就可以確保在不同的電腦上聽到相同的MIDI聲音。你的程序能夠播放不受類別限制,各試各樣樂器的聲音,使用DirectX Audio,你甚至還能夠創造出獨一無二的樂器聲音類別並將它發怖。 * 把聲音做3D定位,創造出3D的環境聲響。 * 可以非常容易地實現例如變調、迴響,以及別的聲音特效。 * 能使用數量超過16個的MIDI音軌。 DirectX Audio突破了從前只能使用16個MIDI音軌的限制,它把同時回放大數量的音軌變成為了可能,而這個數量僅僅只是受到了你的聲音硬體合成器能力的限制。 * 播放位於不同的Audiopaths上的聲音段(segments),效果就可以各自實現在每一段聲音裡。 * 實現在不同的連接阜(port)之間捕捉MIDI資料及流("thru")。 * 從麥克風或者別的輸入設備中捕捉聲音資料。 如果使用DirectMusic Producer或類似程序中的源文件,你還能夠做到 * 在聲音的回放期間能夠做更多的控制,例如動態選項不同的音效變化器(variations)或切換不同的和旋級數。 * 精確地定時重放音樂。 * 利用變化器(variations)播放聲音(wave) * Audiopaths利用Map performance channels可以使相同的聲音段在channel的不同部分產生完全不同的播放效果。 * 動態地創造出全新的音樂片段,這不需要專門算法庫,僅僅需要你的作曲能力而已。 * 動態地將存在的音樂片段進行組合過渡。 * 在聲音回放時端,程序可以獲得存在於特殊節拍點的各類聲音特效的訊息。 這些功能適用於常常只使用主音瀕流(mainstream)的程序。如果程序只要實現一些基本簡單的功能,開發者將DirectX Audio設計得非常易用,很適合初學者。DirectX Audio也是可增強的。 好的程序可以利用虛函數(virtual)繼承設計出新的類,例如: * 支持新的聲音格式文件。 * 音軌可以包含各類資料。 * 處理訊息的工具 - 比方說,可以截取記錄實現變換,或者將要顯示的歌詞置入聲音片段文件。 * 自訂的音序器(sequencer)。 * 自訂的合成器(synthesizer)。 * 效果過濾器。(Effects filters)。 值得一提的是,在DirectX9中加入了DirectMP3和DirectCD兩個功能模組,它們使得主流的音瀕播放也能夠通過DirectX與其使用程序更好地結合在一起。 3、 DirectInput 在DirectX這個大家族中,DirectInput掌管著「行為控制權」。與Winodows事件回應相比,DirectInput可以直接訪問硬體,直接從輸入緩衝區內檢索資料,從而獲得比回應Windows消息更快的速度。此外DirectInput也對力反饋遊戲桿(Force Feedback)提供了良好支持 4、 DirectPlay 網路底層程序的開發向來是令開發者頭痛的一件事,而DirectPlay似乎兼顧了速度與易用性兩個方面,在網路遊戲這樣一類對速度和效率要求較高的軟體來說,針對遊戲最佳化設計的DirectPlay顯然是一個比較好的選項。DirectPlay提供了一個額外的層,使你的遊戲和網路底層相隔。 並且,你的遊戲可以非常簡單地使用DirectPlay API,並使用DirectPlay管理網路通訊。DirectPlay提供的特性,使多人遊戲在開發中得到了很多簡化。其中包括: * 新增和管理點對點、客戶/服務會話(Session) * 在一個會話中管理用戶(User)和組(Group) * 管理在不同網路平台上進行會話的成員之間傳送的消息 * 使遊戲在大廳(Lobby)中互動 * 使用戶可以進行語音交互 5、 DirectShow 作為DirectX中的又一重要成員,DirectShow提供了Windows平台下高品質的媒體捕獲和回放能力,支持很多格式:ASF、MPG、AVI、MP3和WAV。DirectShow支持使用WDM設備或老式視瀕設備進行視瀕捕獲。當有硬體支持的環境下,它會在使用視瀕或音瀕時自動選項是否使用硬體加速。 DirectShow簡化了媒體回放、格式轉換和捕獲工作。同時,當應用程式需要自訂底層流媒體解決方案時,它也提供直接流訪問控制的功能。 你可以用DirectShow編寫DVD播放器、視瀕編緝程序、AVI到 ASF轉換器、MP3播放器和數位視瀕捕獲程序等等。 三、.NET架構的挑戰-----Managed DirectX 不知大家發現沒有,安裝了DirectX9 SDK後它的我的文件裡似乎悄悄多了一個不小的板塊,那就是Managed DirectX。那麼這個神秘的傢伙究竟是幹什麼的呢? .NET Framework的發表打響了Microsoft .NET戰略的第一槍,ASP.NET、Web Service等詞也伴隨著.NET 技術的普及幾乎變得家喻戶曉。 大家已經知道DirectX是關於COM技術的,而COM技術主要是為本機機服務的,在本機機上DirectX可以盡量把硬體的效能發揮到極限,但是它在.NET的網路時代是不是就無法施展它原有的威力呢? 答案肯定是「否」。現在,DirectX已經成為Windows核心API的一部分,而Microsoft表示不會再提供更多的Win32API,今後的Windows API可能將全部整合到.NET Framework中去,那麼DirectX到哪裡去了呢?原來它早就已經改頭換面,與.NET Framework達成了「默契」,這也就是Managed DirectX的由來。 Managed DirectX 實質上是對DirectX進行了一個輕量級的封裝,Microsoft在2003年10月初發怖了Microsoft DirectX 9.0 SDK Update (Summer 2003),其中就著重改進了Managed DirectX部分。一方面使它能與.NET Framework緊密整合,可供.NET 平台下的其他語言使用 (如C#);另一方面對DirectX程序編寫進行了進一步簡化,使得DirectX向RAD開發的方向又邁進了一大步,畢竟ASP.NET、WinForm這些東西是在網路上執行的。如此我們可以試想將來可以在網頁上看到有硬體加速支持的絢麗的3D動畫既時演示,這將是多麼令人激動的事啊! 四、開發環境的支持與組態 在進行DirectX開發之前,我們需要下載並安裝相應版本的DirectX SDK,這個可以從Microsoft的官方站點上免費獲得,最新的DirectX 9.0 SDK Update(Summer 2003)大約是185MB,相關的還有DirectX9 SDK for Pocket PC 、DirectX9 Meltdown、DirectX9 SDK Extras等,下載的相關頁面是http://msdn.microsoft.com/directx。 下載了相應的SDK後,我們就可以開始利用它進行DirectX開發了。 1、Microsoft Visual Studio 6.0/.NET/.NET 2003中的組態 因為DirectX是Microsoft的產品,所以在Visual Studio系列中,DirectX開發所需的組態顯得格外簡單,下面以最新的Microsoft Visual Studio .NET 2003為例說明。 第一步:組態Include和Library的目錄, 設定包含文件(Include) 設定庫文件(Lib) 第二步:增加連接所需的庫文件 如下圖所顯示表單操作,增加相應的庫文件,如dxguid.lib、d3d9.lib、d3dx9.lib等,不同的程序需要不同的庫文件,但是dxguid.lib是必須要包含的。 其他辦法:在設定了Include和Library文件路徑後,我們還可以使用在程序首部加入以下語句變相實現相應庫文件的連接。 #pragma comment (lib,"dxguid.lib") #pragma comment (lib,"d3d9.lib") ........ 2、Borland C++ Builder 5/6/X中的組態 很不幸,自DirectX8.0 SDK起,Microsoft就不再提供Borland編譯器支持的庫文件。Borland C++ Builder是一款非常優秀的RAD開發工具,它在開發桌面應用程式上的便捷性令人歎為觀止,那麼是不是就無法在C++ Builder中進行DirectX開發了呢?這似乎有點可惜。但是Borland自有它的高招,既然標準的DirectX SDK中不提供Borland版的庫文件,那我就自己做!方法如下: 首先,在C++Builder安裝目錄下的bin子目錄中,我們可以找到一個名為implib.exe的文件;其次,開啟 MSDOS指令行視窗,輸入:implib [庫檔案名] [源DLL檔案名],即可成成相應連接所需的庫文件。 例如:從d3d9.dll中匯出編譯所需的d3d9.lib,並將產生的d3d9.lib儲存到C碟根目錄下。 implib c:\d3d9.lib c:\windows\system32\d3d9.dll 這樣我們就得到了所需的lib文件,然後將它和原來SDK中所提供的.h文件混合使用,就可以在C++ Builder中進行夢寐以求的DirectX開發了,此方法在C++ Builder X和DirectX9 SDK Update(Summer 2003)環境下測試通過。(在上述環境下似乎不需要dxguid.lib編譯也能通過) |
送花文章: 3,
|
2005-03-29, 04:19 AM | #4 (permalink) |
榮譽會員
|
五、DirectX的未來
DirectX的基本模型架構: DirectX9 ****************************DirectX10 在現有的DirectX 8和DirectX 9中,可編程頂點著色和像素繪圖是分開來的兩個單元,也就是說,GPU生產廠家需要在GPU中劃分兩個區域來存放Vertex Shader陣列和Pixel Shader貼圖流水線,那麼,能否把這兩者整合在一起呢?可以!那就是DirectX 10!如圖所顯示,預計DirectX10中的Vertex Shader和Pixel Shader將會合併成一個Integrated Shader單元。 六、結束語 正如本文所展現的歷代DirectX的發展史,及其一步步改進的足跡,DirectX的確在媒體技術上佔有至關重要的地位,它是一代又一代媒體技術發展的催化劑。可以預見,未來的DirectX將給我們帶來前所未有的、更加震撼的視聽衝擊,讓我們拭目以待! |
送花文章: 3,
|