DirectX 8.0
DirectX 8.0
DirectX 8.0 的每個組件都包括了重要的新特性,它們極大地增強了 DirectX 的功能。圖形、音頻和網路三個組件被徹底重寫。DirectInput; 包括了新的配置功能、操作映射和更好的國際化支持。DirectShow; 第一次作為 DirectX 的一部分出現在運行時和 SDK 中。
簡而言之,DirectX 8.0 提供的新特性包括:
DirectX Graphics——集成 DirectDraw 和 Direct3DMicrosoft DirectDraw® 和 Microsoft Direct3D® 併入了 DirectX Graphics 組件。API 已經進行了大幅度更新,現在更容易使用,並且支持最新的圖形硬體。最引人注目的新特性是支持可編程著色器(著色器是用著色語言編寫的一段代碼,著色語言是專為在可編程頂點流水線或可編程像素流水線中使用而設計的)。DirectX Audio——集成 DirectMusic 和 DirectSoundMicrosoft DirectMusic® 和 Microsoft DirectSound® 現在緊密集成到新的 DirectX Audio 組件中。WAV 文件或其他資源現在可以由 DirectMusic 載入器載入,通過 DirectMusic 演奏器進行播放,並用 MIDI 音響進行同步。DirectPlay 可伸縮性和性能更佳Microsoft DirectPlay® 組件進行了大幅度更新,其易用性和功能均得到改進,在可伸縮性和性能方面尤為顯著。此外,DirectPlay 現在還支持玩家之間的語音通訊。DirectInput 中的操作映射Microsoft DirectInput 引入了一個重要的新特性:操作映射。通過操作映射能夠在輸入操作和輸入設備之間建立連接。您只需輸入設備處理,而不必再依賴特定的設備對象。DirectX 中包含 DirectShow現在 Microsoft DirectShow 是 DirectX 的一個組成部分,在此版本中已經進行了更新。
DirectX 8.0 的每個組件都包括了重要的新特性,它們極大地增強了 DirectX 的功能。圖形、音頻和網路三個組件被徹底重寫。DirectInput® 包括了新的配置功能、操作映射和更好的國際化支持。
DirectX 8.0 Microsoft Direct3D® API 介面中加入了許多新特性,許多原有性能也得以增強。
DirectDraw 和 Direct3D 完整集成可編程頂點處理語言可編程像素處理語言多重採樣渲染支持點對象三維立體紋理更高階的圖元支持針對各種 D3D 的三維內容創建工具支持帶索引的頂點混色擴展的 Direct3DX 工具庫DirectX Graphics 的一個最顯著的變化是將 DirectDraw(二維圖形介面)和 Direct3D(三維圖形介面)合併為一個公用介面。迄今為止的很長一段時間內,DirectDraw 和 Direct3D 一直相互交叉,因此,將它們劃分為兩個獨立的介面越來越不適應發展。新的集成簡化了 Direct3D 核心的初始化和控制,使這些操作更加簡單。這種變化不僅簡化了應用程序的初始化,而且改進了數據分配和管理的性能,從而減少了內存的佔用。合併介面的另一個原因是 DirectDraw 的開發幾乎完全停止了,在 DirectX 6.0 和 DirectX 7.0 中對它所作的修改僅僅是稍作美化。
可編程著色器的加入可以說是 DirectX 8.0 中 Direct3D 更新的最顯著特性。語言的擴充性非常好——考慮到未來幾年內圖形硬體方面將湧現大量新特性,我們對著色語言所進行的小小補充將會獲得數倍的回報。著色語言是同時為頂點處理和像素處理提供的。
可編程頂點處理語言使程序員可為下列情況編寫硬體著色器:
變形/過渡動畫定義矩陣調色板外觀用戶定義的光照模型一般的環境貼圖過程性幾何圖形任何其他開發人員定義的演演算法可編程像素處理語言使程序員可為下列情況編寫自定義的硬體著色器:
一般的紋理合併表達式按像素光照(凹凸貼圖)按像素環境貼圖(用於照片級真實效果)其他開發人員定義的演演算法
另外一些精彩特性使得實現各種特殊效果更加簡單。多重採樣渲染支持可以實現全方位的反走樣和多重採樣效果,例如動態柔化和景深。點對象支持可以實現閃爍、爆炸、下雨、下雪等微粒系統的高性能渲染。立體紋理可在按像素光照和立體模糊效果中實現區域衰減,並可以應用到更複雜的幾何圖形中。
更高階的圖元支持改善了三維內容的外觀,用主流三維創作工具創建的內容的映射也更為簡單。另外,DirectX 8.0 Graphics 還包括三維內容創建工具插件,可將外觀網格導出到 .X 文件,以便以後在 Direct3D(使用各種 Direct3D 技術)、多重精度級別細節 (LOD) 幾何圖形和更高階曲面數據中使用。帶索引的頂點混色擴展了幾何圖形混色支持,這樣,用於頂點混色的矩陣就能夠通過矩陣索引來引用。
Direct3DX (D3DX) 工具庫中添加了大量功能,在 Direct3D 之上構造的幫助器層簡化了三維圖形開發人員所遇到的常見任務。D3DX 現在包括“定義外觀”庫(支持使用網格)以及用於裝配頂點和像素著色器的功能。請注意,原來由 D3D_OVERLOADS 提供的功能現在已經移到 D3DX 工具庫中。(D3D_OVERLOADS 在 Microsoft DirectX 5.0 中首次引入。)
Microsoft DirectX 8.0 Audio 為播放集成的音樂和聲音效果提供了新的體系結構。儘管仍然使用名稱 Microsoft DirectSound 和 Microsoft DirectMusic,但在它們之間已經沒有明顯的區別。希望將來 DirectMusic API 能夠成為創建互動式聲音效果的首選 API。
DirectX 8.0 Audio 的部分新特性包括:
.wav 文件和基於消息的聲音集成在一個播放機制中音頻通道模型更加靈活、強大,其中包括對段落狀態進行個別控制DLS2 合成,包括特殊效果音頻腳本編寫容器對象,用於在單個文件中保存 DirectMusic Producer 工程的所有組件對演奏、段落和聲道的更強大的控制新的音頻體系結構將 DirectMusic 合成器作為主要的 DirectX 8.0 Audio 聲音生成器。這一高度優化的可下載聲音級別 2 (DLS2) 合成器可以創建所有的聲音,對它們進行混音,並將結果發送到 DirectSound 緩存,以便進行進一步的處理。DirectMusic 合成器也可以在輸出之前將多個獨立的聲音進行混音。這樣,多個獨立的聲音可以通過同一種音頻效果進行處理,並分配到三維空間中的同一個位置。它們只使用一個 DirectSound3D 緩存,將 CPU 的使用和對三維硬體的要求降至最低
.wav 文件和資源現在可以通過 DirectMusic 載入器載入,並通過 DirectMusic 演奏器播放。應用程序不再需要分析 .wav 文件,並將其複製或流入 DirectSound 緩存。.wav 文件播放的定時基於 DirectMusic 主時鐘,.wav 文件可以在音樂事件發生的同時播放,並可以象其他段落一樣通過工具處理。DirectSound API 仍然會得到支持,您仍然可以通過 DirectSound 緩存直接播放 .wav 文件。DirectSound 仍將是用於 .wav 文件捕獲和全雙工的 API。
在以前版本的 DirectMusic 中,演奏通道被映射到埠,同時每個埠將其輸出發送到一個 DirectSound 緩存。在新的模型下,段落中的聲道被映射到音頻通道,控制數據從演奏器流向最終輸出。合成器的輸出可以發送到多個播放緩存,而每個播放緩存有自己的三維位置和效果。音頻通道由應用程序動態創建,或者設計在段落中。段落的每個播放實例都有自己的音頻通道,因此可以單獨修改每個段落狀態的音量、音質和音調等參數。
DirectMusic 合成器現在基於 DLS2 標準,能夠提供更高質量的聲音合成。DLS2 合成器的新特性包括六級封裝、語音分層、釋放波形和額外的低頻振蕩器 (LFO)。每個語音都有一個可選的低通諧振過濾器。作為新的音頻體系結構的一部分,DLS2 合成器可用於簡單的聲音效果播放,包括:
任意循環點每個聲音的過濾器混音自動流播放用於播放的 ACM 編解碼集成效果處理匯流排輕鬆載入 .wav 文件通過使用腳本,作曲家和音效設計師可以對演奏器進行更自如的控制。應用程序不需要處理播放的細節,而代之以調用腳本。例如,一個遊戲事件可能觸發一個腳本函數。通過修改函數,腳本作者可以輕鬆地修改聲道對遊戲事件的響應。
DirectMusic Producer 工程的所有組件都可以保留在一個文件中,查找和載入所有對象非常容易。容器也可以嵌在段落中,因此播放一個段落所需要的所有內容都可以保存在這個段落中。
DirectX Audio 對演奏、段落和聲道的控制更加強大。演奏通知事件現在有一個新的通知類型 DMUS_NOTIFICATION_MUSICALMOSTEND,它表示隊列中的最後一個主段落即將結束。這樣,應用程序就有機會來計劃播放新的段落。
段落的新特性包括:作曲家可以在段落中設置點,指定從何處開始播放段落,從而維護段落與時間簽名之間的關係。主段落可以包含聯接其他段落的任意點。這些點不僅可以聯接最近的小節、節拍或網格,還可以進行更多的控制。在當前主段落完成播放時,可以播放新的段落聯接標誌 DMUS_SEGF_SEGMENTEND 指定的段落。新的 DMUS_SEG_REPEAT_INFINITE 標誌使得一個段落可以播放無限多次。
對於聲道,新的配置和播放標記使得每次播放或循環播放某個段落時,都可以對聲道進行改寫。例如,可以配置和弦聲道,使得每次播放該段落時,都建立新的和聲進行。應用程序可以單獨設置各個聲道的配置,禁用播放和參數控制。聲道可以配置為根據時鐘時間而不是音樂時間進行操作。通過配置自控段落中的聲道,可以用它來替代主段落或控制中的參數聲道。最後,包含歌詞聲道的段落可以將時間戳記文字發送到演奏器。
限於篇幅,其他的新音頻特性在這裡不再贅述。如果您正在深入研究音頻,研究 DirectX 8 的音頻特性可能要花費您的大量時間。
DirectPlay 是應用程序和通訊服務之間的高級軟體介面。有了 DirectPlay,通過 Internet、數據機鏈接或網路來連接遊戲將非常簡單。DirectPlay 既提供了高級的傳輸層服務(例如,有保證或無保證的傳遞,慢速鏈接上的通訊扼殺,以及放棄連接檢測等),也提供了會話層服務(包括玩家名稱表管理和點對點主機轉移)。
下面是 Microsoft DirectPlay API for DirectX 8.0 的新特性列表:
介面已經完全重寫。前端操作現在與 DirectPlay 的其他部分無關。已經加入了語音傳輸。定址信息已經從基於 GUID 的數據格式變為基於 URL 的數據格式。可伸縮性更強大,內存管理更完善。對防火牆和網路地址翻譯器 (NAT) 的支持更佳。分離創建點對點會話和客戶端/伺服器會話的介面,使創建網路應用程序的複雜度得到了奇迹般的簡化。用於創建 DirectPlay 傳輸會話的介面包括:
IDirectPlay8Peer,提供創建點對點會話的方法IDirectPlay8Client,提供創建客戶端/伺服器應用程序的客戶端部分的方法IDirectPlay8Server,提供創建客戶端/伺服器應用程序的伺服器端部分的方法DirectPlay 不再要求前端客戶端只能與 DirectPlay 應用程序配合使用。這樣,前端服務提供程序和應用程序都可以實現 DirectPlay,而無須相互匹配。前端實施現在分為兩個簡化的介面:
IDirectPlay8LobbyClient,用於管理前端客戶端,以及計算和啟動前端識別應用程序。IDirectPlay8LobbiedApplication,用於在系統中註冊可由前端啟動的應用程序,使它真正能由前端啟動。它也用於從前端獲取連接信息,使遊戲啟動時無需查詢用戶。DirectPlay Voice 提供了一組介面,用於給應用程序添加實時語音通訊。下列新介面提供了語音支持:
IDirectPlayVoiceClient 提供了在 DirectPlay Voice 會話中創建和管理客戶端的方法。IDirectPlayVoiceServer 提供了承載和管理 DirectPlay Voice 會話的方法。IDirectPlayVoiceTest 用於測試客戶端計算機上的音頻設置。
以前版本的 DirectPlay 通過 GUID 地址使用二進位數據塊,難以實現和讀取。在 DirectX 8.0 中,DirectPlay 引入了 URL 格式的地址表示方法,並使用一組新的介面來創建和操作新的定址格式:
IDirectPlay8Address 提供用於創建和操作 DirectPlay 地址的基本定址方法。IDirectPlay8AddressIP 提供 IP 提供程序專用的定址服務。就 DirectX 8.0 而言,DirectPlay 已經被徹底重寫,以便提供卓越的性能和強大的可伸縮性。用戶帶寬的增長給網路遊戲設計和實施帶來了天翻地覆的影響。改進的 DirectPlay 線程緩衝池管理使開發人員更容易設計可變化而且更可靠的應用程序,能夠同時支持大量聯機玩家。
編寫跨越 NAT、防火牆和其他 Internet 連接共享 (ICS) 方法的網路遊戲可能會非常困難,針對無保證 (UDP) 通訊編寫網路遊戲尤其困難。在 DirectX 8.0 中,DirectPlay 開發時已經注意了這些問題,它將支持可能的 NAT 解決方案。DirectPlay TCP/IP 服務提供程序對遊戲數據使用單一的、開發人員可選的 UDP 埠,從而可以適當地配置防火牆和 NAT。另外,DirectPlay 使用了 UDP,因此對於客戶端/伺服器體系結構的遊戲來說,某些 NAT 后的客戶端可以直接連接到遊戲,而無須進行額外的配置。
DirectInput 為遊戲桿、頭盔、多鍵滑鼠以及力回饋設備等各種輸入設備提供了最先進的介面。通過直接與設備驅動程序配合,DirectInput 繞過了 Windows 消息系統,提供了最佳性能。
Microsoft DirectInput API for DirectX 版本 8.0 中新特性的列表如下:
操作映射對國際化應用程序的支持更佳新的介面創建支持對遊戲桿滑塊數據的更改操作映射是支持輸入設備方面的一個重大進步。操作映射簡化了輸入循環,降低了遊戲中對自定義遊戲驅動程序、自定義設備分析器和自定義配置用戶介面的需要。操作映射也包括了默認的用戶介面,使用戶可以快速簡便地配置設備。這種標準 API 通過低級用戶介面 API 來實現,使應用程序可以在其自定義用戶介面中直接訪問設備映像。
DirectX 8.0 中的 DirectInput 設備支持新的屬性,這些屬性可以處理從國際化鍵盤上輸入的本地化的鍵名。共添加了兩個鍵盤屬性:DIPROP_KEYNAME,用於檢索本地化的鍵名;DIPROP_SCANCODE,用於檢索掃描碼。這些特性對於大多數在全世界發布的基於 DirectInput 的應用程序非常有用。
DirectInput 對象現在通過 IDirectInput8 介面來表示。新的幫助器函數 DirectInput8Create 可創建對象並檢索此介面。IDirectInput8 具有一個新 CLSID,並且不能通過對 CLSID_DirectInput 類對象的介面調用 QueryInterface 來獲取,這一點與以前的 DirectX 版本有所不同。
遊戲桿滑塊數據在以前的 DirectX 版本中分配到 DIJOYSTATE 或 DIJOYSTATE2 結構的 Z 軸,現在則位於這些結構的 rglSlider 數組中。儘管這種變化會導致對現有代碼的必要調整,但它終究更容易理解。
此版本中的 DirectShow 也進行了大幅度修改。DirectX 8.0 中添加的部分新特性包括:
新的過濾圖形特性Windows Media™ 格式支持視頻編輯支持新的 DVD 支持新的 MPEG-2 傳輸和程序流支持對廣播驅動程序體系結構的支持DirectX 媒體對象過濾圖形管理器支持一些新的特性,包括動態圖形生成和實時來源合成。使用動態圖形生成,您現在可以在圖形運行過程中對過濾圖形進行修改。而以前,要添加或刪除過濾器,應用程序必須停止該圖形,因而打斷數據流。DirectShow 現在還支持實時來源合成——例如,可以將實時音頻流與實時視頻流合成。
兩個新的過濾器使 DirectShow 應用程序可以讀取或寫入 Microsoft Windows Media 格式的文件。ASF Reader 過濾器用於讀取和分析 Windows Media 格式的文件;ASF File Writer 過濾器用於寫入 Windows Media 格式的文件,並能夠執行必要的複合和壓縮操作。DirectShow 和 Windows Media SDK 現在提供了完整的解決方案,用於編寫應用程序來創建和播放 Windows Media 格式流。
新的 DirectShow 編輯服務 (DES) API 支持視頻編輯。DES 建立在核心的 DirectShow 體系結構之上,提供了一組專門為操作視頻編輯工程而設計的介面。DirectShow 的框架更適合於創建視頻編輯應用程序,作為應用程序開發人員,您將從中獲益匪淺。DES 取代了剪切表,同時剪切表將不再受到支持。
兩個新的介面 IDVDControl2 和 IDVDInfo2 極大地擴展了 DVD 導航器的功能。DVD 導航器現在實現了完整的 DVD Annex-J 命令集,既可以播放卡拉 OK,也可以播放影碟。新的 MSWebDVD ActiveX® 控制項使這項功能可在基於腳本的應用程序中使用。
新的過濾器 MPEG-2 Demultiplexer 提供了在推模式下(從實時來源接收數據)對 MPEG-2 傳輸流和程序流的支持。該過濾器與過濾圖形中的新實時來源合成支持配合,可以提供優異的 MPEG-2 增強支持。
Microsoft 廣播驅動程序體系結構 (BDA) 是新一代數/模電視調製設備的規範。在 DirectX 8.0 中,DirectShow 通過一組新的內核模式設備過濾器和“BDA 調製模型”來支持 BDA 兼容設備。“BDA 調製模型”是一組對象的集合,提供了對各種類型的數字和模擬網路進行調製的方法。
DirectX 媒體對象 (DMO) 提供了編寫數據流組件的新方法。與 DirectShow 過濾器相似,DMO 接受輸入數據,並將其用於生成輸出數據。但是,DMO API 比相應的 DirectShow API 簡單得多。因此,DMO 比 DirectShow 過濾器更容易創建、測試和使用。DMO 與 DirectShow 完全兼容。只要您需要使用 DirectShow 提供的服務,例如圖形同步、智能連接、數據流的自動處理和線程管理,您都可以使用 DMO。但是,DMO 不需要使用過濾圖形,因此應用程序無需 DirectShow 就可以使用 DMO。
DirectX 8.0 版本的 DirectShow 包含更多的功能,但限於篇幅,這裡就不再多說。請記著試用新增和改進的 DirectShow。
總之,DirectX 8.0 是一個激動人心的版本,具有多媒體開發人員所需的各種優秀功能。無論您關注的是三維圖形、音頻、網路還是視頻,您都可以發現新的功能。