Virtools引擎3D遊戲程式設計

《Virtools引擎3D遊戲程式設計》是一部指導書,ISBN為9787302313274。

圖書簡介

本書直接從VSL、Shader、SDK的角度來講解Virtools開發遊戲、虛擬漫遊的各方面,所以本書面向的是已經具有一定編程經驗的讀者,最好已經學會了Virtools。

本書的內容是先從容易上手的VSL腳本講起,最先講的是VSL的基礎語法。可以讓沒有代碼開發經驗的讀者也能夠看懂VSL,然後慢慢講解各個VSL類型的用法。

VSL部分講解完後,接著就是Shader的學習和套用。Shader可謂是短小精悍,算法卻博大精深,所以要求讀者了解HLSL語言基礎,這一部分講解了目前遊戲中經常用到的畫面效果,非常值得學習。

SDK是發揮和擴充Virtools功能的利器,SDK涉及的面很廣,所以沒有像VSL部分那樣羅列所有類的用法,而是強調如何進行開發,講解了常用的SDK開發方式。掌握這一部分,就相當於完全駕馭了Virtools引擎。

隨書附送有配套光碟。光碟按章節順序提供了書中所用的實例代碼,這些代碼都經過了作者的精心調試,在Windows XP、Virtools 4.0下保證可用。

圖書目錄

第一部分 VSL腳本語言程式設計

第1章 認識VSL 3

1.1 VSL簡介 3

1.1.1 BB與VSL的關係 3

1.1.2 VSL的優勢 3

1.1.3 VSL腳本語言與C語言的對比 5

1.1.4 VSL與其他腳本語言的差異 5

1.2 VSL腳本管理器 5

1.2.1 VSL腳本管理器的使用 5

1.2.2 創造VSL腳本程式 6

1.2.3 帶輸入輸出的VSL腳本程式 7

1.2.4 VSL腳本程式的重命名、定位和刪除 10

1.2.5 VSL快捷鍵使用 10

1.3 VSL語法描述 11

1.3.1 VSL的變數和常量 11

1.3.2 VSL的運算符 12

1.3.3 VSL的表達式與語句 13

1.3.4 VSL的賦值語句、聲明語句和注釋 15

1.3.5 VSL的條件判斷語句 15

1.3.6 VSL的循環和控制語句 20

1.3.7 數組和多維數組 25

第2章 VSL的函式 28

2.1 函式的定義與調用 28

2.1.1 函式的概念 28

2.1.2 定義函式 29

2.1.3 函式的調用 29

2.1.4 函式的重載 30

2.2 函式的參數及其返回值 31

2.2.1 形參和實參 31

2.2.2 函式值的返回 32

2.3 變數的作用域和存儲類型 33

2.3.1 局部變數、全局變數和作用域 33

2.3.2 VSL全局共享變數和全局靜態變數 35

2.3.3 結構體和枚舉類型 36

2.4 字元串類的使用 39

2.4.1 字元變數、字元串類型變數、字元數組和字元串類的區別 39

2.4.2 字元串類的定義與賦值 39

2.4.3 字元串的處理函式 40

2.4.4 字元串的套用 41

第3章 VSL中的3D數學與變換以及簡單幾何體 43

3.1 向量 43

3.1.1 向量的概念 43

3.1.2 向量長度和歸一化 44

3.1.3 向量的加減 44

3.1.4 向量和標量的乘法 45

3.1.5 向量的點積 45

3.1.6 向量的叉積 45

3.1.7 位置和位移向量 46

3.2 VSL中的2D向量Vector2D 46

3.2.1 Vector2D的方法 46

3.2.2 Vector2D的套用 48

3.3 VSL中的3D向量Vector 50

3.3.1 Vector的方法 50

3.3.2 Vector的套用 50

3.4 矩陣和Matrix 51

3.4.1 矩陣的概念 51

3.4.2 Matrix的方法和套用 52

3.5 簡單幾何體 53

3.5.1 點、線、面 53

3.5.2 正方體 54

3.5.3 圓錐體和圓球 55

3.5.4 矩形 55

第4章 Virtools中的2D實體 60

4.1 2D幀Entity2D 60

4.1.1 Entity2D與Rect 60

4.1.2 Entity2D的套用 60

4.2 2D精靈Sprite 64

4.2.1 Sprite與Entity2D 64

4.2.2 Sprite的套用 65

第5章 燈光、材質和紋理 68

5.1 光 68

5.1.1 光的類型 68

5.1.2 用VSL設定光照 69

5.1.3 光的衰減屬性 69

5.1.4 高光 70

5.1.5 色彩 71

5.2 材質的特性 72

5.2.1 物體表面材質屬性 72

5.2.2 3D物體填充模式 73

5.2.3 Flat渲染和Gouraud渲染 74

5.2.4 Alpha混合 74

5.2.5 Alpha測試 76

5.2.6 紋理採樣過濾 77

5.2.7 紋理定址 78

5.2.8 多重紋理混合 79

5.2.9 紋理過濾和紋理定址的顯示例程 80

5.3 紋理的特性 81

5.3.1 紋理的插槽屬性 81

5.3.2 天空盒紋理 83

第6章 3D物體 85

6.1 3DEntity 85

6.1.1 坐標系和3D物體 85

6.1.2 3DEntity的位置、方向與縮放 86

6.1.3 物體的父子關係 89

6.1.4 物體的格線 91

6.1.5 3D物體的螢幕坐標位置 92

6.2 Mesh 93

6.2.1 Mesh的套用 93

6.2.2 Mesh與材質、紋理貼圖 95

6.2.3 紋理坐標:(u,v)坐標 95

6.2.4 Mesh的通道材質特性 96

6.3 3D精靈Sprite3D 97

6.3.1 3D精靈和公告板 97

6.3.2 3D精靈的套用 97

第7章 角色動畫 99

7.1 角色 99

7.1.1 角色的概念 99

7.1.2 播放角色動畫 99

7.1.3 角色的次級動畫播放 102

7.1.4 角色的身體 104

7.2 角色動畫 105

7.2.1 如何確定角色動畫是否有問題 105

7.2.2 角色的動畫幀 105

7.2.3 角色動畫的一些設定 108

7.2.4 用VSL設定角色動畫 110

7.3 角色動畫的套用 111

第8章 攝像機 116

8.1 相機的基本屬性 116

8.1.1 相機的投影 116

8.1.2 相機的視錐 118

8.1.3 目標相機 119

8.2 相機的套用 119

8.2.1 第一人稱相機 119

8.2.2 第三人稱相機 122

第9章 曲線與格線 126

9.1 3D曲線 126

9.1.1 3D曲線和3D曲線節點的概念 126

9.1.2 3D曲線的套用 128

9.1.3 3D曲線節點的詳細設定 129

9.2 2D路徑 131

9.3 格線 133

9.3.1 格線和層 133

9.3.2 格線的VSL套用 133

第10章 表、組和場景 137

10.1 表 137

10.1.1 表的數據存儲類型 137

10.1.2 使用VSL創建表和存儲數據 138

10.1.3 通過VSL提取表中數據和刪除行列 140

10.1.4 通過VSL對表中數據的操作 142

10.2 組 143

10.2.1 組的意義 143

10.2.2 組的套用 143

10.3 場景 144

10.3.1 場景的概念 144

10.3.2 場景技術的簡單套用 146

10.4 數據容器 147

10.4.1 數據容器的使用 147

10.4.2 String、StringTokenizer和ArrayString 150

第11章 聲音與視頻 152

11.1 聲音的基本運用 152

11.1.1 聲音的特性 152

11.1.2 播放聲音的方法 153

11.1.3 2D聲音和3D聲音 154

11.2 聲音的高級套用 155

11.2.1 錐形的聽覺範圍 155

11.2.2 聲音的多重播放 157

11.3 視頻的播放 158

11.3.1 視頻的屬性 158

11.3.2 視頻的播放 159

第12章 VSL中的bc 161

12.1 工廠的概念 161

12.1.1 工廠的作用 161

12.1.2 工廠的產品 161

12.1.3 工廠如何複製產品 162

12.1.4 工廠如何刪除產品 164

12.2 屬性控制 165

12.2.1 屬性的概念 165

12.2.2 屬性的操作 165

12.3 bc的其他功能 168

12.3.1 取得場景物件 168

12.3.2 bc的其他一些小功能 172

12.4 輸入管理器 174

12.4.1 滑鼠的使用 174

12.4.2 鍵盤的使用 176

12.5 渲染設備 179

12.5.1 渲染設備的概念 179

12.5.2 如何設定霧 179

12.5.3 滑鼠拾取物件 181

12.5.4 2D螢幕與3D位置 185

12.6 ac 188

12.6.1 ac的概念 188

12.6.2 如何創建和使用ac 188

第二部分 高級渲染語言

第13章 Virtools中的Shader 193

13.1 認識Shader 193

13.1.1 Shader的誕生 193

13.1.2 Virtools中的Shader 193

13.1.3 Virtools中Shader的執行過程 194

13.1.4 Shader編輯器 195

13.2 Shader語言 196

13.2.1 創建第一個Shader程式 196

13.2.2 頂點著色器和像素著色器 198

第14章 光照 200

14.1 參數 200

14.1.1 設定自發光參數的Virtools寫法 200

14.1.2 設定自發光參數的HLSL寫法 201

14.2 光照 203

14.2.1 光照的原理 203

14.2.2 光照Shader 204

14.2.3 光照的HLSL寫法 206

14.3 鏡面反射 210

14.3.1 一盞燈的鏡面反射光照 210

14.3.2 兩盞燈的鏡面反射光照 212

第15章 紋理貼圖光照 214

15.1 簡單的紋理渲染 214

15.1.1 Virtools紋理渲染的Shader代碼 214

15.1.2 HLSL紋理渲染 215

15.1.3 帶光照的紋理渲染 216

15.1.4 逐像素地紋理渲染 217

15.1.5 兩層紋理渲染 220

15.2 凹凸紋理映射 221

15.2.1 凹凸紋理映射的由來 221

15.2.2 凹凸紋理映射的原理 222

15.2.3 凹凸紋理映射的實現 222

15.2.4 改良的凹凸紋理映射 226

15.3 環境映射 230

15.3.1 環境映射的原理和立方貼圖紋理 230

15.3.2 Virtools中如何生成立方體貼圖 231

15.3.3 反射環境映射 231

15.3.4 折射環境映射 234

15.3.5 菲涅爾效果和顏色色散 237

15.3.6 環境映射和凹凸紋理映射的結合 241

15.4 2DFrame的Shader 244

15.4.1 2D幀的多次渲染 244

15.4.2 2D幀的旋轉 246

第16章 Shader的效果 250

16.1 Shader實現動畫效果 250

16.1.1 脈動的茶壺——頂點動畫 250

16.1.2 舞動的花朵——紋理UV動畫 252

16.1.3 波光粼粼的淺水區——序列幀動畫 256

16.2 簡單的修飾效果 258

16.2.1 廣告牆變換效果 258

16.2.2 海底焦散 261

16.2.3 畫面模糊效果 265

16.2.4 景深效果 268

16.2.5 地球大氣效果 271

16.3 簡單的幾個其他效果 276

16.3.1 灼燒 276

16.3.2 發光 277

16.3.3 綻放 280

16.3.4 毛髮 284

16.3.5 灰度 288

第17章 Shader的套用 290

17.1 地形渲染 290

17.1.1 TextureSplatting原理簡介 290

17.1.2 TextureSplatting對地形建模的一點要求 291

17.1.3 Shader代碼剖析 291

17.2 運動模糊 296

17.2.1 運動模糊原理簡介 296

17.2.2 設定需要配合的資源 296

17.2.3 運動模糊的Shader代碼 297

17.3 帶倒影的水面渲染 300

17.3.1 渲染水面的步驟 300

17.3.2 水面的設定 302

17.3.3 水的Shader代碼 303

第18章 Shader的其他套用 307

18.1 渲染車 307

18.1.1 渲染車燈 307

18.1.2 渲染車輪 311

18.1.3 渲染車窗 314

18.2 渲染場景 317

18.2.1 帶法線的地形渲染 317

18.2.2 樹的渲染 322

18.2.3 樹葉與草的渲染 323

第三部分 VirtoolsSDK

第19章 認識VirtoolsSDK 329

19.1 Virtools的體系結構 329

19.1.1 SDK的介紹 329

19.1.2 幀循環的介紹 331

19.1.3 主要對象之間的關係 332

19.2 使用SDK創建BB 333

19.2.1 行動前的準備 333

19.2.2 通過嚮導創建BB 335

19.2.3 BB源檔案的解釋 338

19.2.4 編譯生成BB 344

第20章 用SDK開發BB 346

20.1 BB的參數 346

20.1.1 BB的3種參數 346

20.1.2 BB參數值的獲取和賦值 347

20.1.3 改變BB參數的數量和類型 349

20.2 BB的輸入輸出連線埠 354

20.3 自定義類型的參數 358

20.3.1 自定義類型的參數說明 358

20.3.2 創建簡單的自定義參數 359

20.3.3 結構體類型參數的處理函式 361

20.4 使用SDK的BB 367

20.4.1 修改PushBotton和DragAndDrop 367

20.4.2 轉向功能 368

20.4.3 有層級關係的中文顯示 370

第21章 用SDK擴展功能 379

21.1 多執行緒的套用 379

21.1.1 進程和執行緒 379

21.1.2 VxThread、VxMutexl、VxMutexlLock 380

21.1.3 多執行緒的套用 381

21.2 管理器的開發使用 391

21.2.1 管理器 391

21.2.2 Manager代碼解釋 394

21.2.3 Virtools與ADO的整合 395

21.2.4 創建ADOACCESSManager 397

21.2.5 在BB中調用管理器的方法 404

21.2.6 管理器功能的整合 406

21.3 為VSL綁定新類型 408

21.3.1 綁定新類型的規則 408

21.3.2 綁定的細則 409

21.3.3 綁定的簡單範例 414

21.4 第三方聲音引擎與Virtools的整合 415

21.4.1 整合第三方聲音引擎的原因 415

21.4.2 第三方聲音引擎使用介紹 416

21.4.3 不同喇叭播放不同聲音 417

21.5 網路引擎與Virtools的整合 425

21.5.1 整合網路引擎的原因 425

21.5.2 使用網路引擎創建伺服器 425

21.5.3 網路模組管理器 430

21.5.4 連線到伺服器的BB 436

21.5.5 傳送訊息到伺服器的BB 438

21.5.6 處理伺服器訊息的BB 439

第22章 用SDK開發新功能 442

22.1 讀寫註冊表 442

22.1.1 註冊表的簡單介紹 442

22.1.2 讀寫註冊表功能描述 443

22.1.3 訪問註冊表的BB 444

22.2 檔案目錄的操作 446

22.2.1 列舉所有指定類型檔案 446

22.2.2 記錄日誌檔案 449

22.2.3 設定列印 451

22.2.4 複製移動檔案 455

22.3 Virtools與串口通信 457

22.3.1 串口通信類 457

22.3.2 定義串口通信協定 458

22.3.3 串口通信管理器 461

22.3.4 啟用串口BB 462

22.3.5 從串口中得到數據 463

22.3.6 向串口寫數據 464

22.4 Virtools與Flash整合 466

22.4.1 和Flash整合的原因 466

22.4.2 Flash的封裝 466

22.4.3 封裝一個播放swf檔案的BB 467

第23章 發布應用程式 473

23.1 編譯生成獨立的執行程式 473

23.1.1 關於執行程式的介紹 473

23.1.2 編譯生成Virtools自帶的播放器 474

23.1.3 CustomPlayer類分析 474

23.1.4 CustomPlayerApp類分析 475

附錄A VSL全局函式 478

附錄B Virtools參數類型GUID 481

附錄C 枚舉CK_BEHAVIOR_FLAGS的標識 484

附錄D CKBehavior::SetCallbackFunction回調標準 486

附錄E Virtools訊息使用須知 487

E.1 訊息的接收 487

E.2 訊息的參數 488

附錄F 常用類的標識符類CK_CLASSID 491

參考文獻 493

相關詞條

熱門詞條

聯絡我們