內容簡介
《DirectX 3D遊戲編程實用教程》內容簡介:DirectX是由微軟創建的多媒體編程接口,目前最流行的是DirectX 9.0。《DirectX 3D遊戲編程實用教程》介紹DirectX 9.0,內容為六篇共18章,包括3D遊戲編程基礎、3D遊戲圖形渲染、3D遊戲輸入控制、3D遊戲套用編程、3D遊戲音頻輸出和3D遊戲網路通信。包含3D遊戲編程的主要內容。《DirectX 3D遊戲編程實用教程》以遊戲編程基礎為先導;遊戲編程中每一個方法先原理後套用;實例的展開既突出重點,又考慮完整性。
讀者對象:《DirectX 3D遊戲編程實用教程》可作為大學本科和高職高專遊戲編程課程和遊戲編程培訓教材,也可供廣大遊戲編程用戶學習和參考。
圖書目錄
第一篇 3D遊戲編程基礎
第1章 Windows編程基礎 1
1.1 簡單的Windows應用程式 1
1.1.1 創建Windows應用程式項目 1
1.1.2 配置、生成及運行項目 6
1.2 Windows應用程式結構 8
1.2.1 數據類型 8
1.2.2 入口函式 9
1.2.3 註冊視窗類 10
1.2.4 創建並顯示視窗 11
1.3 Windows訊息機制 12
1.3.1 訊息佇列 13
1.3.2 訊息循環 14
1.3.3 訊息處理 14
1.4 匈牙利命名法 15
1.4.1 類型和常量的命名 16
1.4.2 變數的命名 16
1.4.3 函式和參數的命名 16
1.4.4 類的命名 17
1.5 本章小結 17
第2章 Direct3D編程基礎 18
2.1 DirectX概述 18
2.1.1 DirectX的發展過程 18
2.1.2 DirectX的組成部分 19
2.1.3 Direct3D與COM 20
2.1.4 Direct3D接口對象 21
2.2 Direct3D渲染流水線 22
2.2.1 渲染流水線 22
2.2.2 靈活頂點格式 23
2.2.3 D3D中的顏色 24
2.2.4 D3D中的圖元 25
2.3 Direct3D程式結構 27
2.3.1 簡單的Direct3D應用程式 28
2.3.2 創建Direct3D接口對象 32
2.3.3 獲取硬體設備信息 33
2.3.4 創建Direct3D設備接口 33
2.3.5 開始Direct3D圖形繪製 36
2.3.6 結束並清理對象資源 37
2.4 頂點快取 38
2.4.1 創建頂點快取 39
2.4.2 訪問頂點快取 40
2.4.3 使用頂點快取繪製圖形 41
2.4.4 頂點快取的繪製示例 42
2.5 索引快取 44
2.5.1 創建索引快取 44
2.5.2 訪問索引快取 45
2.5.3 使用索引快取繪製圖形 45
2.5.4 索引快取的繪製示例 46
2.6 Direct3D渲染狀態 49
2.6.1 剔除狀態 49
2.6.2 著色狀態 50
2.6.3 填充狀態 51
2.7 本章小結 52
第3章 基本的數學基礎 53
3.1 坐標空間 53
3.1.1 3D笛卡兒坐標系 53
3.1.2 多坐標系統 54
3.2 向量 56
3.2.1 向量的基本概念 56
3.2.2 向量的基本運算 57
3.2.3 D3D中的向量 59
3.3 矩陣 60
3.3.1 矩陣的基本概念 60
3.3.2 矩陣的基本運算 61
3.3.3 矩陣的基本變換 63
3.3.4 D3D中的矩陣 66
3.4 平面及射線 67
3.4.1 平面的定義 67
3.4.2 點與平面的關係 68
3.4.3 射線的定義 68
3.4.4 射線與平面的關係 69
3.5 空間坐標變換 69
3.5.1 世界變換 70
3.5.2 取景變換 71
3.5.3 投影變換 72
3.5.4 視口變換 73
3.6 空間坐標變換示例 74
3.7 本章小結 78
第二篇 3D遊戲圖形渲染
第4章 光照與材質 79
4.1 光照模型 79
4.1.1 環境光 79
4.1.2 漫反射光 80
4.1.3 鏡面反射光 80
4.2 光源類型 81
4.2.1 點光源 82
4.2.2 方向光 83
4.2.3 聚光燈 83
4.3 物體的材質 85
4.3.1 D3D材質 85
4.3.2 頂點法線 86
4.4 光照與材質示例 87
4.5 本章小結 92
第5章 紋理映射 93
5.1 紋理映射基礎 93
5.1.1 紋理坐標 93
5.1.2 創建紋理 95
5.1.3 啟用紋理 96
5.1.4 創建紋理示例 96
5.2 紋理過濾 99
5.2.1 最近點採樣過濾 99
5.2.2 線性紋理過濾 99
5.2.3 各向異性過濾 100
5.2.4 多級漸進過濾 100
5.2.5 紋理過濾示例 102
5.3 紋理定址 104
5.3.1 重複定址 104
5.3.2 鏡像定址 105
5.3.3 夾取定址 105
5.3.4 框線顏色定址 106
5.3.5 紋理定址示例 106
5.4 紋理包裝 108
5.4.1 紋理包裝原理 108
5.4.2 紋理包裝示例 110
5.5 本章小結 113
第6章 格線模型 114
6.1 格線模型基礎 114
6.1.1 格線的子集及屬性 115
6.1.2 格線的鄰接信息 116
6.1.3 格線的創建及繪製 117
6.1.4 創建及繪製格線示例 119
6.2 格線的最佳化及克隆 122
6.2.1 最佳化格線 122
6.2.2 克隆格線 123
6.3 X檔案格式分析 124
6.3.1 模板的定義 124
6.3.2 常用的模板類型 126
6.3.3 X檔案的結構 129
6.4 從X檔案創建格線 131
6.4.1 載入格線模型數據 131
6.4.2 獲取紋理和材質信息 132
6.4.3 繪製格線模型 133
6.4.4 讀取X檔案示例 134
6.5 創建漸進格線模型 137
6.5.1 ID3DXPMesh接口 138
6.5.2 創建並繪製漸進格線 138
6.5.3 創建漸進格線示例 140
6.6 D3D中的幾何體 142
6.7 本章小結 143
第7章 深度、融合及模板 145
7.1 深度測試 145
7.1.1 深度快取 145
7.1.2 深度測試 146
7.1.3 深度測試示例 147
7.2 融合技術 150
7.2.1 融合因子 151
7.2.2 Alpha來源 152
7.2.3 啟用Alpha融合 153
7.2.4 Alpha融合示例 153
7.3 模板技術 156
7.3.1 模板快取 156
7.3.2 模板測試 157
7.3.3 更新模板快取 158
7.4 鏡面效果 159
7.4.1 鏡面成像原理 159
7.4.2 實現鏡面效果 160
7.5 本章小結 163
第8章 HLSL語言基礎 164
8.1 HLSL概述 164
8.1.1 可程式管線 164
8.1.2 HLSL工作模型 165
8.2 簡單的HLSL程式 167
8.2.1 編寫HLSL代碼 168
8.2.2 HLSL關鍵字和保留字 169
8.2.3 HLSL預處理指令 169
8.2.4 輸入、輸出結構 170
8.2.5 HLSL入口函式 171
8.3 HLSL基本語法 171
8.3.1 HLSL中的變數 171
8.3.2 HLSL中的函式 177
8.4 D3D與HLSL互動 178
8.4.1 編譯著色器程式 179
8.4.2 獲取常量的句柄 180
8.4.3 設定常量的值 180
8.5 HLSL程式示例 181
8.6 本章小結 184
第9章 著色器與效果 185
9.1 頂點著色器 185
9.1.1 創建頂點聲明 185
9.1.2 使用頂點著色器 189
9.1.3 頂點著色器示例 191
9.2 漸變動畫效果 196
9.2.1 漸變動畫原理 196
9.2.2 實現漸變動畫 197
9.3 像素著色器 201
9.3.1 創建像素著色器 201
9.3.2 使用像素著色器 202
9.4 多重紋理混合 203
9.4.1 HLSL採樣器 203
9.4.2 多重紋理坐標 205
9.4.3 啟用多重紋理 205
9.4.4 多重紋理示例 206
9.5 效果框架 210
9.5.1 通道與手法 211
9.5.2 著色器內置對象 212
9.5.3 效果中的渲染狀態 212
9.5.4 創建效果框架 213
9.5.5 效果中常量的設定 214
9.5.6 使用效果框架 214
9.5.7 效果框架示例 216
9.6 本章小結 223
第三篇 3D遊戲輸入控制
第10章 DirectX輸入控制 224
10.1 DirectInput接口 224
10.2 使用DirectInput接口 225
10.2.1 DirectInput的初始化 226
10.2.2 創建設備接口對象 227
10.2.3 設定數據格式 227
10.2.4 設定協作級別 228
10.2.5 設定特殊屬性 229
10.2.6 獲取、輪詢設備 230
10.2.7 讀取設備數據 231
10.3 使用DirectInput處理鍵盤 232
10.3.1 初始化鍵盤設備接口 232
10.3.2 獲取輸入的鍵盤數據 233
10.3.3 鍵盤輸入控制示例 233
10.4 使用DirectInput處理滑鼠 237
10.4.1 在D3D中移動滑鼠 237
10.4.2 初始化滑鼠設備接口 238
10.4.3 獲取滑鼠的移動位置 238
10.4.4 滑鼠輸入控制示例 239
10.5 使用DirectInput處理遊戲桿 242
10.5.1 遊戲桿及其控制原理 242
10.5.2 初始化遊戲桿設備接口 242
10.5.3 讀取遊戲桿的狀態數據 244
10.5.4 遊戲桿輸入控制示例 245
10.6 本章小結 249
第四篇 3D遊戲套用編程
第11章 攝像機、地形及天空 250
11.1 虛擬攝像機 250
11.1.1 攝像機的屬性 250
11.1.2 攝像機的變換 253
11.1.3 攝像機的實現 257
11.1.4 攝像機套用示例 259
11.2 三維地形系統 262
11.2.1 地形高度圖 262
11.2.2 頂點的計算 264
11.2.3 索引的計算 265
11.2.4 地形的繪製 266
11.2.5 地形類的實現 267
11.2.6 地形繪製示例 268
11.3 球形天空頂 270
11.3.1 頂點的計算 270
11.3.2 索引的計算 272
11.3.3 天空的繪製 273
11.3.4 天空類的實現 274
11.3.5 天空繪製示例 274
11.4 本章小結 276
第12章 文字、拾取及碰撞檢測 277
12.1 字型及文本繪製 277
12.1.1 繪製2D文本 277
12.1.2 繪製3D文本 279
12.1.3 文本繪製示例 280
12.2 拾取技術 284
12.2.1 格線外接體 284
12.2.2 拾取技術原理 286
12.2.3 拾取套用示例 289
12.3 碰撞檢測 293
12.3.1 邊界球碰撞檢測 293
12.3.2 AABB碰撞檢測 295
12.3.3 OBB樹碰撞檢測 297
12.3.4 AABB碰撞檢測示例 298
12.4 本章小結 301
第13章 骨骼動畫 302
13.1 X檔案中的骨骼信息 303
13.1.1 骨骼蒙皮信息 303
13.1.2 骨骼層次信息 304
13.1.3 模型動畫信息 305
13.2 載入骨骼動畫數據 308
13.2.1 擴展結構體 309
13.2.2 載入X檔案 310
13.2.3 CAllocateHierarchy類 311
13.2.4 生成蒙皮格線 313
13.3 頂點混合技術 318
13.3.1 頂點混合原理 318
13.3.2 索引頂點混合 320
13.4 骨骼動畫的繪製 321
13.4.1 開啟頂點混合 322
13.4.2 更新骨骼矩陣 322
13.4.3 繪製骨骼動畫 323
13.5 骨骼動畫控制器 326
13.5.1 使用動畫控制器 326
13.5.2 平滑過渡動畫集 327
13.6 骨骼動畫示例 329
13.7 本章小結 334
第14章 實時陰影 336
14.1 平面陰影的原理 336
14.1.1 點光源平面陰影 337
14.1.2 方向光平面陰影 338
14.2 平面陰影的實現 338
14.2.1 計算陰影矩陣 338
14.2.2 平面陰影的繪製 339
14.2.3 平面陰影示例 340
14.3 體積陰影的原理 342
14.3.1 模型陰影體 342
14.3.2 陰影錐的計算 343
14.4 體積陰影的實現 345
14.4.1 體積陰影的繪製 348
14.4.2 體積陰影示例 351
14.5 陰影貼圖的原理 354
14.6 本章小結 354
第15章 廣告牌技術與粒子系統 356
15.1 廣告牌技術 356
15.1.1 廣告牌的原理 357
15.1.2 廣告牌的實現 357
15.1.3 廣告牌示例 359
15.2 粒子系統 362
15.2.1 粒子系統的原理 363
15.2.2 粒子系統的實現 363
15.2.3 粒子系統的更新 367
15.2.4 粒子系統的繪製 368
15.3 粒子系統示例 370
15.3.1 煙花示例 371
15.3.2 噴泉示例 374
15.4 本章小結 377
第16章 霧化及LOD地形 379
16.1 霧化效果 379
16.1.1 霧化混合因子 379
16.1.2 頂點霧化 381
16.1.3 像素霧化 382
16.1.4 範圍霧化 383
16.2 LOD地形原理 384
16.2.1 LOD四叉樹算法 385
16.2.2 LOD地形的實現 387
16.2.3 節點剔除原理 389
16.2.4 節點簡化準則 392
16.2.5 地形裂縫的處理 395
16.2.6 地形的更新及繪製 396
16.3 LOD地形示例 401
16.4 本章小結 404
第五篇 3D遊戲音頻輸出
第17章 Direct3D音頻控制 405
17.1 音頻檔案格式 405
17.1.1 音頻的基本概念 405
17.1.2 WAV音頻格式 406
17.1.3 MIDI音頻格式 407
17.1.4 MP3音頻格式 407
17.2 使用DirectSound處理音頻 408
17.2.1 DirectSound的結構 408
17.2.2 DirectSound的初始化 409
17.2.3 DirectSound音頻緩衝 410
17.2.4 向緩衝區中寫入數據 413
17.2.5 播放聲音及音頻控制 415
17.2.6 用DirectSound反饋信息 417
17.2.7 DirectSound套用示例 418
17.3 使用DirectMusic處理音頻 421
17.3.1 DirectMusic的結構 421
17.3.2 開始使用DirectMusic 422
17.3.3 載入、操作MIDI段 423
17.3.4 DirectMusic套用示例 427
17.4 使用DirectShow處理音頻 428
17.4.1 DirectShow的工作原理 429
17.4.2 DirectShow的初始化 430
17.4.3 載入流媒體數據 430
17.4.4 控制流媒體的播放 431
17.4.5 DirectShow套用示例 432
17.5 本章小結 434
第六篇 3D遊戲網路通信
第18章 Direct3D網路控制 435
18.1 了解網路互聯 435
18.1.1 網路會話模型 435
18.1.2 定址與通信協定 437
18.2 DirectPlay概述 438
18.2.1 創建和管理會話 438
18.2.2 DirectPlay傳輸協定 438
18.2.3 DirectPlay網路對象 439
18.2.4 玩家與遊戲大廳 441
18.3 客戶/服務會話 442
18.3.1 初始化網路對象 442
18.3.2 選擇服務提供者 444
18.3.3 使用DirectPlay地址 446
18.3.4 建立客戶/服務會話 447
18.3.5 傳送、接收數據 454
18.3.6 創建並使用分組 457
18.3.7 結束及終止會話 458
18.4 遊戲大廳的支持 459
18.4.1 遊戲大廳的結構 459
18.4.2 實現遊戲大廳客戶端 460
18.4.3 實現支持大廳的程式 462
18.5 客戶/服務會話示例 463
18.5.1 創建服務端程式 463
18.5.2 創建客戶端程式 470
18.6 本章小結 473
附 錄
附錄A DirectX9 SDK的安裝與配置 474
A.1 安裝DirectX 474
A.2 配置開發環境 475
A.3 瀏覽DirectX示例 476
附錄B DXUT程式框架介紹 478
B.1 創建DXUT項目 478
B.2 DXUT框架的初始化 480
B.3 創建應用程式視窗 481
B.4 創建Direct3D設備 482
B.5 DXUT的事件處理 483
B.5.1 框架事件 483
B.5.2 設備事件 484
B.5.3 訊息事件 485
B.6 DXUT的錯誤處理 486