Game Programming with DirectX
序言
我是數學出身的程序員,所以在這個系列中我會講解很多的數學模型.
再有, 這個系列是以一個完整的3D遊戲爲背景的.
環境
的編譯環境是要求Windows XP, Windows Server 2003, Visual Studio .Net 2003 or 2005.
基礎知識
這個系列的基礎知識 :
a. C/C++; 使用DirectX 的native API.
b. Windows SDK programming skill.
c. COM basic skill.
d. 幾何學和高等代數
第零卷 簡介
0.1 圖形技術的發展
0.1.1 硬件的發展
我們可以從圖0.1瞭解大致的過程.
字符顯示 基於位圖的圖形 覆蓋圖 實時視頻 AGP
------------------------------------------------------------------------------------------->
Multiple/Soft 字體 圖形協助處理器 簡單3D 高級3D
圖0.1
0.1.2 AGP的由來
隨着硬件的發展, 顯示卡有了自己的內存--顯示內存, 圖0.2顯示了當時的硬件結構.
圖0.2
系統擴展總線的一邊是CPU和系統內存; 另一邊是GPU和顯示內存. 正象它們的名字的暗示一樣, 在主板上的系統內存可以很輕易的被CPU訪問, 但GPU卻不能自由訪問, GPU只能自由訪問顯示內存.
如果GPU要系統內存中的數據, 必須由CPU負責從系統內存複製到顯示內存,必須通過性能有限的擴展總線.
於是主板就爲GPU開了專線--AGP(圖0.3), AGP的作用是給GPU訪問系統內存開了後門, 在CPU不必知道的情況下自由訪問.
當擴展總線還是雙道的普通公路時, AGP已經是8道的高速公路了.
圖0.3
0.1.3 DirectX的由來
Windows圖形顯示操作系統在PC上有着輝煌的歷史, Windows所提供的應用程序與硬件設備完全分離的特性使得程序員不必爲不同的硬件在代碼中加入不同的硬件依賴指令, 對於普通的應用程序這是個好想法; 但這個特性對遊戲和多媒體程序員來說是個噩夢.
爲把應用程序與硬件設備完全分離, 在應用程序與硬件設備之間添加了N層的隔離, 你只能調用最上層的命令, 讓最上層再依次調用它相鄰的層, 這樣一層一層往下調用, 到最下層後再通知硬件設備的驅動層, 驅動層才命令硬件設備爲你的調用服務.
------ 近在眼前但似遠在天邊...
圖0.4爲圖形顯示的層次調用
圖0.4
於是又一專線來了--DirectX, 它是Windows系統下的遊戲和多媒體專線, 如圖0.5爲圖形顯示DirectX Graphics
圖0.5
DirectX Graphics的工作很簡單, 如果硬件設備提供相應的硬件加速功能, 那就用硬件加速; 如果沒有相應的硬件加速功能, 那就軟件模擬; 之後就通知硬件設備的驅動層.
0.1.4 DirectX的Directness原理
a. 最快速 --- 同硬件廠商合作實現特定的硬件功能.
b. 最短延遲 --- 達到子彈打到你時就能聽到你的慘叫, 不會象恐龍一樣N秒後纔怪叫.
c. 底層接口 --- 提供最基本的功能, 同樣的遊戲在不同創造性和革命性的程序員手裏出來有本質的差別;
你能作出魔獸的效果嗎? 爲什麼我們就不能呢?
0.2 DirectX
0.2.1 DirectX Components
前面廢話了很多, 現在我們要結束跑題了. 我們首先來看看DirectX的組成模塊,
a. DirectX Graphics --- 圖形模塊
b. DirectX Input --- 輸入/控制模塊
c. DirectX Audio --- 音效模塊
d. DirectMusic --- capture and play sounds模塊
e. DirectDraw --- 被廢棄, 由DirectX Graphics中的Direct3D接管
f. DirectPlay --- 被廢棄, 由Windows Sockets代替
g. DirectShow --- video and audio playback or capture模塊, 不再是DirectX的模塊, 由Platform接管
h. DirectSetup --- 自動安裝DirectX模塊
我們主要講解蘭色的部分, 再包括算法和AI.
0.2.2 DirectX Graphics
這個模塊只包括Direct3D.
我們遊戲顯示的虛幻的世界都是由Direct3D來創建的, 這部分是最最主要的, 我們會化大半的時間來講解如何展示你心中的夢想,以及你要用Direct3D來實現夢想要掌握的數學模型知識.
0.2.3 DirectX Input
這個模塊只包括DirectInput和XInput. XInput是Xbox 360 連接到Windows PC後的控制的部分, 我們不講解.
如何控制遊戲, 我們是通過DirectInput.
0.2.4 DirectX Audio
這個模塊只包括DirectSound和XACT. 我們只講解DirectSound.
0.2.5 算法和AI
這裏將展示如何讓虛擬的人物和怪物更人性化的在虛擬世界裏活動.
0.2.6 綜合運用
結合上面的內容, 我們要建立一個完整的3D遊戲.