DirectX軟體

DirectX軟體

DirectX,它比Windows GDI要快好幾倍,可用於不同的語言和多種平台,支持從繪製象素到高級3D圖象,從播放簡單聲音到數字音樂,從鍵盤控制到反震手柄……它給你遊戲編程所需的一切(有點誇張)。當然了,它是巨大的,需要好幾本書才能含蓋它的全部。

基本DirectX軟體信息

DirectX,它比Windows GDI要快好幾倍,可用於不同的語言和多種平台,支持從繪製象素到高級3D圖象,從播放簡單聲音到數字音樂,從鍵盤控制到反震手柄……它給你遊戲編程所需的一切(有點誇張)。當然了,它是巨大的,需要好幾本書才能含蓋它的全部。閱讀本章,你需要前幾章的知識和C語言的知識,由於我們還要談到組件對象模型(COM),它是面向對象系統的基礎,你最好還要有一點兒C++的知識。沒有也不太要緊,我在講到這處時會照顧你的。反正你記住,使用DirectX並不需要多少C++的知識。開始吧!

DirectX軟體DirectX軟體

什麼是DirectX
DirectX是遊戲製作者的API(Application Development Interface)。它是一組允許你直接控制計算機硬體設備的軟體。如果你的硬體支持DirectX,並且你用硬體加速你的程式,這就意味著一個字——快。不用擔心你的硬體知識,你不會真正的接觸到它們。我們是通過硬體抽象層(HAL)和硬體仿真層(HEL)來保證設備無關性和讓你的程式正常運行。
DirectX由很多組件構成,每一個都有特定的用途。組件DirectDraw是最為重要的一個,因為所有的圖形都要用到它,它是2D圖形的引擎,3D圖形也同樣離不開它。DirectDraw是我們今天就要說的。其它的組件是:
DirectSound:提供硬體和軟體的聲音混合與回放。
DirectMusic:處理基於訊息的音樂數據。它支持樂器數字接口(MIDI)並為創建互動式音樂提供創作工具。
DirectPlay:使得通過數據機連結或通過網路來與應用程式相連成為可能
Direct3D:是一個三維圖形包,它提供一個高級的保留模式(Retained Mode)接口,這使得你能夠實現一個完整的三維圖形系統。它還包含一個低級的即時模式(Immediate Mode)接口,使得應用程式獲得對渲染管線的完全控制。
DirectInput:為包括遊戲桿、滑鼠、鍵盤和遊戲控制器在內的輸入設備提供支持。它還為反饋遊戲設備提供支持。
DirectSetup:為DirectX提供了一個簡單的安裝過程。它簡化了更新顯示和音頻驅動程式的過程,並且確保沒有硬體或軟體衝突的存在。
AutoPlay:讓你能夠製作一張一旦插入驅動器就能自動安裝的光碟。AutoPlay並非DirectX所獨有,因為它是Microsoft Win32 API的一部分。
組件對象模型(COM)是DirectX的基礎,有一些技巧建立COM對象——別問我怎么做——但你知道一點點還是有好處的。我只是簡單說一下,如果你有興趣,具體的細節就自己查資料吧!可能下一節你有些困惑,但不要緊,我所說的你不用太明白,畢竟我們的目的是使用COM對象,這可比創建容易多了。

組件對象模型(COM)
COM接口是DirectX技術的基礎,沒有COM就沒有DirectX。(不用擔心,你只需要對COM技術有一個粗淺的了解就可以使用DirectX——只要你在編寫DirectX應用程式時遵循一定的步驟,甚至都可以在不了解COM的情況下使用DirectX。
DirectX的大多數API都是基於COM結構的。COM為軟體模組化和軟體重用提供了最堅實的基礎,它的最重要的概念就是接口(interface),接口是軟體重用的最基本方法。更專業的說,接口是一系列操作的規範描述,即接口規範。
所有的COM接口都是從IUnKnown接口繼承而來的,IUnknown接口是所有COM接口的根。IUnknown接口具有3個方法:
· QueryInterface():此方法查詢新接口,並在新接口存在時返回之。
· AddRef():此方法在接口或其它應用程式連編到此COM對象上時將引用計數值遞加1

DirectX軟體DirectX軟體

· Release():此方法將COM對象的引用計數遞減1。當引用計數遞減到0時,該COM對象自動釋放。
所有COM對象都具有這三個方法。雖然DirectX應用程式一般不需要考慮引用計數的問題,但引用計數確實是存在的,它已經由DirectX自動完成了。我們所要做的,就是創建DirectX對象,然後在使用完畢後調用Release方法釋放引用。

設定

用DirectX創建程式,你需要有三件主要的事要做。第一件事是COM對象本身,它們包含在.DLL檔案里,這些.DLL檔案需要在Windows里註冊,這在安裝DirectX軟體包時已經完成了。這些對象是我們創建DirectX應用程式時用到的接口,例如IdirectDraw。但這還不夠,因為在COM層上直接使用DirectX是令人沮喪的和乏味的。我們希望有更容易的辦法解決它。利用靜態庫(.LIB檔案)是個好辦法,它是DirectX軟體包的一部分,你可以從Microsoft免費獲得。它有一個“打包”函式使你工作更輕鬆。使用DirectX的不同組件,你需要連結不同的靜態庫。例如你要使用DirectDraw組件,你就需要ddraw.lib。
最後,你還需要DrectX頭檔案,它包含函式原形、宏、常量和你需要用到的各種類型。對於DirectDraw,這個頭檔案是ddraw.h。要確認你使用了正確的檔案版本,你還得讓編譯器包含軟體開發包的目錄。具體的做法是:
首先點擊Tool選單,選擇Options,然後點擊Directories,在Show Directories for 組合框下拉選單中選擇Include files,增加一個新的目錄。將你的DirectX的路徑填入。(例如:C:DXSDKinclude)然後將它移到列表的第一位,使編譯時第一個尋找它(防止尋找老版本)。然後選擇Show Directories for組合框下拉選單中的Library files,方法同前,只是把include改成lib。現在,你已經設定完了DirectX。你仍然需要手動增加一些庫檔案到你的項目中,但先不急,我將在以後講它。我們將使用DirectX 7.0。

DirectX版本號

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位浮點顏色,讓遊戲程式設計師們更容易更輕鬆的創造出更漂亮的效果,讓程式設計師編程更容易

相關詞條

相關搜尋

熱門詞條

聯絡我們