認識DirectX及本書概略
”DirectX是微軟開發的一套功能豐富的底層API,其中涵蓋了對2D/3D圖形加速的支援,對各種輸入裝置的控制,以及對聲音和音樂輸出的混音和採樣、對多玩家網路遊戲的控制、對各種多媒體流模式的控制等“。
——摘自本書譯者的序言
本書主要是講解運用DirectX3D進行互動式遊戲的開發。DirectX3D只是DirectX的一個子集。DirectX3D是一個龐大的API叢集,必須學會使用DirectX SDK文檔。
代碼約定及其他規則:所有成員變數以底線為首碼;
全域變數和函數名都以大寫字母開頭,局部變數和方法名都以小寫字母開頭;
本書所有代碼均沒有做異常處理;
在本書中對於DirectX有些方面沒有提及,這裡補充(來自《Direct3D遊戲開發技術詳解》)
在Windows出現之前,DOS是最流行的作業系統,遊戲開發也基本上時在DOS上運行,但是這樣效率及各種效果讓人難以忍受。就在這個時候,Windo ws95出現,並伴隨著DirectX1.0的問世。從此,DirectX建立起來遊戲開發的標準。
DirectX包含多個組件,下面分別簡單介紹:
1. Direct3D: 3D圖形包,在顯卡的支援下提供各種豐富、強大的圖形渲染功能。
2. DirectDraw: 2D圖形包,提供硬體加速的2D渲染顯示功能。
3. DirectInput: 為包括遊戲杆、滑鼠、鍵盤和遊戲控制器在內的輸入裝置提供支援。
4. DirectPlay: 對編寫多人連網遊戲提供支援,包括在處理玩家串連、訊息發送、語音交流架構等方面提供了強大的功能。
5. DirectSound: 音效方面的支援,提供低延遲的聲音和對硬體資源的高度控制。
6. DirectShow: 提供媒體流架構支援,可播放高品質的視頻和音頻。
7. DirectSetup: 對DirectX應用程式提供安裝方面的支援。
關於HAL
HAL(Hardware Abstraction Layer),即硬體抽象層。它和其他關係如下圖所示:
從圖中可以看到,最底層的Graphics Hardware是圖形顯示卡硬體,其上的Device Driver Interface是顯示卡驅動程式,由顯卡製造商提供。然後在驅動程式上面架構了兩套API,一套是Windows GDI,另外一套是HAL硬體抽象層上的Direct3D API。HAL通過顯卡所支援的模式對Direct3D API通過加速,因此可以提供更好的效能。
DirectX是按照微軟的COM(Component Object Model)搭起來的。設計COM是希望它能夠提供一個更安全、易升級、可移植 的軟體模組。COM是一種基於二進位的編程模型,它的介面無法通過任何方式改變,並且提供向前相容的功能。COM本身的二進位編程模型使跨語言編程成為其一大優勢。
另外,我還喜歡這本書裡面的一句話:
3D遊戲編程不像其他領域一樣學幾句語句就能抄刀上陣......
——Josh 2012年10月12日