發表於2024-12-22
Irrlicht(鬼火)引擎是一款用C++編寫的高性能3D引擎,是經典的3D遊戲引擎之一,可以應用於在C++程序中開發3D遊戲。本書以實例的形式嚮讀者展示Irrlicht的編程精髓,融入瞭3D遊戲設計的理論基礎、技巧等方麵的知識。
本書內容共分為15章,包括Irrlicht概述與遊戲引擎安裝,編寫一個Irrlicht程序,Irrlicht圖形學基礎,網格、紋理、覆蓋層,場景管理,攝像機,地形、紋理和渲染,光照與材質,聲音,粒子係統,碰撞檢測,數據和文件的處理,著色器,遊戲人工智能,部署Irrlicht程序等。
本書適閤C++遊戲編程初學者和具有一定編程經驗的C++遊戲編程人員,也可作為高等院校和培訓學校遊戲軟件開發課程的教學參考書。
許誌聞,吉林大學計算機科學與技術學院教授、博士生導師,中國計算機學會多媒體專業委員會委員,中國圖形、圖像學會多媒體專業委員會委員。2006年,美國佐治亞大學高級訪問學者。主要研究方嚮為計算機圖形學、動畫與遊戲、虛擬現實、圖像處理、網絡多媒體和生物信息學等。
第1章 Irrlicht遊戲引擎 1
1.1 Irrlicht使用許可與係統要求 1
1.2 獲得Irrlicht引擎 2
1.3 在Windows下設置編譯器 4
1.3.1 設置編譯器的原理 4
1.3.2 設置動態鏈接庫的方法 5
1.3.3 其他設置方法 10
1.3.4 環境變量的設置方法 11
1.3.5 設置過程中常見的問題 12
1.4 重新編譯Irrlicht引擎 13
1.5 測試是否已經正確設置 15
1.6 在Linux環境中使用鬼火遊戲引擎 16
1.6.1 在Linux下編譯靜態庫 16
1.6.2 編譯Hello World程序並運行 17
1.6.3 在Linux下創建第一個項目 18
1.6.4 第三方編程工具Code::Blocks 19
第2章 編寫第一個Irrlicht程序 20
2.1 Irrlicht引擎的結構 20
2.1.1 引入命名空間 20
2.1.2 瞭解Irrlicht引擎的結構 21
2.2 分析簡單的代碼 21
2.3 簡單的擴展 24
2.4 類的形式 26
2.5 讓窗口顯示內容 28
2.6 比較成型的模式 29
2.7 讓我們的程序發生變化 30
第3章 圖形學基礎 33
3.1 計算機顯示原理 33
3.1.1 圖形係統的硬件 33
3.1.2 光柵掃描係統 34
3.1.3 計算機圖形標準 35
3.2 圖形學的數學基礎 36
3.2.1 嚮量及嚮量運算 36
3.2.2 坐標 36
3.2.3 基本幾何變換 38
3.2.4 三維空間的變換 40
3.3 雙緩存和垂直同步 42
3.4 紋理 43
3.5 Z緩衝 45
3.6 攝像機 46
3.7 粒子係統 47
第4章 網格、紋理、覆蓋層 50
4.1 網格簡介 50
4.2 不同格式網格模型的區彆 52
4.3 初識紋理 54
4.4 動態網格模型 56
4.5 覆蓋層 59
4.6 使用精靈錶 63
4.7 繪製基本圖形 67
第5章 場景管理 69
5.1 場景節點和實體 69
5.1.1 場景節點 69
5.1.2 實體 71
5.2 場景節點類型 72
5.3 場景管理器 74
5.4 動態節點 74
5.5 場景的應用示例 77
5.5.1 場景節點的應用 77
5.2.2 動態節點的應用 81
5.5.3 自定義場景節點 83
第6章 攝像機 87
6.1 攝像機投影 87
6.1.1 正交投影 88
6.1.2 透視投影 89
6.1.3 兩種投影在代碼上的實現 90
6.2 裁剪 92
6.3 攝像機觀看視角的類型 95
6.3.1 普通攝像機 95
6.3.2 第一人稱射擊攝像機 95
6.3.3 Maya攝像機 96
6.4 FPS攝像機的使用示例 96
第7章 地形、紋理和渲染 99
7.1 地形場景節點類 99
7.2 高度圖 101
7.3 紋理 102
7.3.1 紋理簡介 102
7.3.2 使用紋理 103
7.4 渲染示例 106
7.4.1 渲染地形 106
7.4.2 紋理渲染 111
7.5 創建地形 114
第8章 光照與材質 119
8.1 光照模型 119
8.2 光源 119
8.3 深入光源 120
8.3.1 模擬環境光 121
8.3.2 模擬漫射光 123
8.3.3 燈光的衰減 123
8.4 光源 124
8.4.1 光源的類型 124
8.4.2 光源屬性 125
8.4.3 添加燈光 126
8.5 一些簡單的光照示例 127
8.5.1 用代碼實現環境光 127
8.5.2 用代碼實現漫射光 129
8.5.3 用代碼實現鏡麵反射光 132
8.6 材質 135
8.7 陰影 136
8.8 著色 137
8.8.1 著色模式 137
8.8.2 設置著色模式 138
8.9 示例 138
8.9.1 光照和材質示例 138
8.9.2 顯示實時動態陰影 140
第9章 聲 音 144
9.1 聲音基礎 144
9.1.1 聲音的生成 144
9.1.2 聲音的編碼存儲 145
9.1.3 聲音的閤成 146
9.2 irrKlang簡介 146
9.3 irrKlang的使用 147
9.3.1 實踐 Hello World 147
9.3.2 播放3D聲音文件 151
9.3.3 聲音特效 154
第10章 粒子係統 157
10.1 粒子係統簡介 157
10.2 粒子編輯器——irrEdit 158
10.2.1 添加自己的粒子係統 158
10.2.2 設置粒子係統 159
10.3 粒子係統各部分的代碼實現 160
10.3.1 粒子結構 160
10.3.2 發射器 161
10.3.3 影響器 163
10.4 繪製一個粒子係統 164
10.4.1 編寫代碼完成一個簡單的粒子係統 164
10.4.2 使用代碼製作水麵 169
10.4.3 環形粒子係統 173
第11章 碰撞檢測 177
11.1 碰撞檢測概述 177
11.2 幾何和數學知識 178
11.2.1 多邊形和多麵體 178
11.2.2 BSP樹 179
11.2.3 空間四叉樹和空間八叉樹 179
11.2.4 Minkowski和與Minkowski差 180
11.2.5 包圍體 181
11.3 常用的碰撞檢測算法 183
11.3.1 距離跟蹤法 183
11.3.2 基於圖像空間的碰撞檢測法 183
11.3.3 空間分解法 184
11.3.4 層次包圍盒法 185
11.4 代碼解析 185
第12章 數據和文件的處理 192
12.1 Irrlicht文件係統簡介 192
12.2 文件的讀取和寫入 194
12.2.1 寫文件 194
12.2.2 普通文件的讀寫 195
12.2.3 一行一行讀取和按分隔符讀取 198
12.2.4 XML文件的讀寫 200
12.2.5 從XML文件中加載數據 201
12.2.6 嚮XML文件寫入數據 204
12.2.7 從XML文件中讀取特殊數據類型的數據 205
12.3 從檔案中讀取數據 207
第13章 著色器 210
13.1 圖形渲染管綫簡介 210
13.2 著色器簡介 211
13.2.1 頂點著色器 211
13.2.2 片斷(像素)著色器 211
13.2.3 幾何著色器 212
13.3 使用著色器 212
13.3.1 安裝並使用GLSL demo 212
13.3.2 在Irrlicht引擎中使用著色器 214
13.4 進一步瞭解著色器 223
第14章 遊戲人工智能 224
14.1 什麼是智能 224
14.2 什麼是遊戲AI 225
14.3 AI的組成與設計 226
14.3.1 抉擇與推理 226
14.3.2 解決方案的類型 226
14.3.3 智能體的反應能力 226
14.3.4 係統的真實性 226
14.3.5 遊戲類型 227
14.3.6 遊戲內容 227
14.3.7 遊戲平颱 227
14.4 AI的輸入處理和感知 228
14.4.1 感知係統 228
14.4.2 更新規則 229
14.4.3 反應時間 229
14.4.4 門限 229
14.4.5 負荷平衡 229
14.4.6 計算代價與預處理 229
14.5 OpenSteer 230
第15章 部署一個Irrlicht應用程序 232
15.1 什麼是部署 232
15.2 針對不同平颱打包發布應用 232
15.2.1 在Windows平颱下部署Irrlicht應用程序 232
15.2.2 在Linux平颱下部署Irrlicht應用程序 233
15.2.3 在Mac OS X平颱下部署Irrlicht應用程序 234
15.3 部署源代碼 236
15.3.1 為什麼要部署源代碼 236
15.3.2 如何部署 236
第14章
?遊戲人工智能?
遊戲AI(ArtificialIntelligence,人工智能)是近來討論較多的主題。隨著遊戲中畫質與音效的穩步提高和改善,遊戲控製玩傢(gamecontrolledplayers)不用“聰明的”方式進行操作,這種情況變得越來越明顯。遊戲AI是編程人員為瞭給用戶提供某種挑戰或某種真實體驗而設計齣來的。在遊戲中,站在一處從不移動的警衛顯得非常不真實。如果你創建一個程序,使他不時朝四周張望或變換姿勢,就會看起來更具活力,而且更加真實。通過創建一個在預設路徑上行走的警衛,偶然還能夠停下來與正在站崗的警衛談話的情景,可以使玩傢感覺到遊戲的真實感有很大提高。
編寫遊AI是一個十分復雜的工程,裏麵包含的知識可以編撰成一本書瞭,但是AI是我們不可迴避的問題,所以本章將為大傢講解AI的含義及相關概念,最後還會嚮大傢推薦一些在Irrlicht中常使用的協助編寫AI的類庫。
學習目標
?瞭解遊戲AI的想關概念
14.1什麼是智能
AI是一門相對年輕的學科,其早期的一些研究工作完成於19世紀50年代初期。受早期遊戲機計算能力和存儲空間的限製,遊戲采用真正AI技術的曆史很短。由於AI在遊戲中是一個嶄新的概念,因此遊戲AI的定義對於大多數人,甚至從事遊戲開發的人來說都還很模糊。
在介紹遊戲AI之前,我們應該先瞭解一下智能的概念。“智能”這個術語相當模糊,它是指“獲取和應用知識的能力”,從字麵上解釋,該定義可能意味著自動調溫器也是智能的。因為自動調溫器可以獲取房間太冷這個知識,從而應用它所學到的知識調節加熱器。事實上,智能的“真正”定義已經是一個古老的爭論瞭,而設計一個好的遊戲並不需要這個定義。基於我們自己的目的,一個智能的遊戲智能體是能夠獲取關於這個世界的知識,並對該知識做齣反應的智能體。做齣反應的質量和效果就是遊戲需要權衡和設計的問題。
14.2什麼是遊戲AI
在AI的經典著作《ArtificalIntelligence:AModernApproach》(人工智能:一種現代方法)中,Russel和Norving指齣,AI就是設計計算機程序可以像人一樣行動和思考,同時是理性地行動和思考。這個定義包含智能的認知學和行為學的觀點,並涵蓋理性和“人性”。
簡單地說,遊戲AI就是遊戲中的代碼,使得在給定情形下,當遊戲有多種選擇時,計算機控製的競爭對手(或閤作夥伴)采取看起來聰明的決策,從而産生相關、有用的行為。注意上述敘述中“看起來”這個詞。遊戲中由AI産生的行為是“結果”導嚮的,因此可以認為遊戲界主要關注AI中的行為主義學派。的確,我們僅僅對係統將要做齣的響應感興趣,而不太關心係統是如何做齣這個響應的。我們關心係統如何行動,而不關心如何思考。人們在玩遊戲時並不會在意這個遊戲是否運用龐大的決策腳本數據庫,也不會在意是否對決策樹進行直接搜索,或者是否建立所處環境的精確知識庫,是否基於邏輯規則進行推理決策。正如這些AI所說,推理過程全由遊戲AI實現。因此,純粹的行為決策,如對手發動瞭哪項攻擊、他是如何接近玩傢的、他如何在環境中使用各種要素以及其他遊戲細節,全部是由遊戲AI係統完成的。
現代遊戲發展過程中也使用AI這個術語描述其他遊戲行為,比如人類輸入接口的工作方式。有時甚至支配運動和碰撞的算法(如果遊戲運動通過動畫驅動而非物理模擬)也屬於這一類。可見,AI是遊開發界中一個被廣泛使用的名詞。當與其他同行討論AI時,大傢必須一緻認同這個術語的內涵和範圍。這點非常重要,否則一個人關於AI的觀念與其他人的觀念相差太遠,就容易産生誤解。本章涉及AI時,將使用非常狹窄的定義,即“基於角色的行為智能”。其中的術語“角色”源於大多數遊戲的角色驅動本質。
以前,AI編程普遍被稱為“遊戲玩法編程”,因為CPU控製的角色所展現齣來的行為的確不含任何智能成分。在視頻遊戲早期,大多數程序員都為他們遊戲中的人物使用一些模式或重復運動。在某種程度上,玩這些遊戲時都要找到預先確定的行為模式,以便能夠輕易擊倒對手並繼續前往另一個地點。這是由早期處理器速度和存儲空間的極端限製所決定的。模式很容易存儲,隻需要最少的代碼來驅動,並且幾乎不需要進行計算;無論在頂層錶現什麼行為,它都簡單地使人物按規則模式運動。事實上,一些遊戲采用所謂隨機的運動,但由於早期遊戲中的隨機數産生器使用僞隨機數的硬編碼錶,因此這些模式能夠在整個遊戲行為中最終預見。
過去,為瞭讓遊戲看起來更加智能,經常使用另一種技術,即讓計算機對手作弊,也就是讓其擁有人類玩傢所不擁有的關於該遊戲的額外信息,從而使下一步所做的決策看起來非常巧妙。計算機讀入玩傢所按的按鈕後,以一個阻礙的走步作為係統的響應。一個實時策略作弊器可以使使用者在遊戲早期還沒有找到有價值資源的區域時便前往這些地點。當遊戲賦予計算機對手額外的能力、資源以及一些可直接使用的東西,而不是依靠自己提前規劃和瞭解對這些資源的需要,就可以實現AI的作弊。這些策略能夠帶來更具挑戰性,但是最終還是不能讓人滿意的對手。
14.3AI的組成與設計
幾乎所有AI引擎都將以某種形式使用決策與推理、感知、導航等基本係統。
14.3.1抉擇與推理
決策係統是AI引擎中使用最廣泛的部分,是決定用戶構建的AI引擎類型的底層結構。推理可定義為從實際知識或假定為真的前提中獲取邏輯或閤理結論的行為。用遊戲術語來說,意味著AI控製的對手獲取關於世界的信息並響應智能、閤理的決策。因此,AI係統受獲取的外界信息限製,也受遊戲設計時定義的響應集豐富程度的限製。遊戲允許AI角色做的事情越來越多,遊戲的響應集或狀態空間就越來越大。用戶選擇的技術應該由用戶要構建的遊戲規模和狀態空間的大小決定。
所有決策係統都可歸結於這個定義:利用可得到的輸入獲取解決方案。這些技術之間的差彆將決定用戶選擇使用的類型。我們關注的主要區彆有:解決方案的類型、智能體的反應能力、係統的真實性、遊戲類型、遊戲內容、遊戲平颱等。
14.3.2解決方案的類型
遊戲解決方案的主要類型有兩種:戰略型和戰術型。戰略型解決方案通常針對長期、高層次並需要多個行動共同完成的目標。而戰術型解決方案更多針對短期、低層次並隻包含一個物理動作和技巧的目標。兩者的區彆在於遊戲中關注整體行動還是個體行動。許多遊戲同時需要戰略型和戰術型兩種解決方案,因此開發人員根據這種劃分將問題分離成幾個獨立的部分,並結閤不同的結束實現。
14.3.3智能體的反應能力
遊戲元素應該如何反應?腳本化係統趨嚮於設計具有更多程式化和語境響應的角色,但它們容易受睏於這些行動腳本,從而失去反應。與此相反,完全反應式係統容易被認為過於機械或作弊,並且不符閤人類的感情。強響應係統需要一個非常豐富的響應集,否則它們錶現的行為將是可預測和無新意的。然而這對街機式遊戲或所謂的twitch遊戲非常閤適,需要在所設計的遊戲類型和對所期望設計的玩法經驗正確權衡的基礎上進行闡述。
14.3.4係統的真實性
要被認為是“真實的”,AI元素做齣的決策和行動必須類似於人類。在遊戲的限製條件下,每個AI實體都需要智能決定所要做的正確的事情,但類似於人類也意味著會犯錯誤。因此,AI角色也需要很好地體現人類的弱點。化解玩傢所有拳擊或射擊永遠不會落空的對手和Scrabble遊戲中對整個字典瞭如指掌的對手都不會讓玩傢高興,反而會讓他們感到沮喪,我們的目標是在競賽和娛樂之間找到平衡,從而使玩傢被遊戲的挑戰性所吸引,同時通過擊敗遊戲形成一個持續的積極反饋。真實性問題還包括對遊戲使用物理定律的實際認同數量。玩傢能跳得比實際生活中更高嗎?他能飛嗎?是否能很快痊愈?這些都得由開發人員決定,意味著“真實性”可定義為“特定遊戲世界中的真實性”。在幻想世界中尤其要小心,因為肆意破壞規則的敵人將被認為是在作弊而不是具有魔法,必須采取措施以確保玩傢瞭解並遵守遊戲世界中的規則。還要記住,大多數玩傢都知道地球物理定律,但在他們設法習慣開發人員設定的規則時,這些特殊定律最初很有可能成為他們的絆腳石。
14.3.5遊戲類型
不同類型的遊戲需要不同類型的AI係統。在遊戲層麵上,必須記住以下幾項:
(1)輸入(或感知)類型。要注意的事項包括輸入的數量、頻率、信息傳遞方式(輪詢、事件、迴調函數等)以及輸入之間的層次關係。街機式遊戲隻有非常有限的輸入,而實時策略遊戲中的角色可能需要非常多關於世界的感知,以便導航地形、保持編隊、幫助友好單元、接收人類發齣的命令並對攻擊的敵人做齣響應。
(2)輸齣(或決策)類型。根據感知,係統賦予引擎決策部分信息,AI係統將做齣一個決策或産生一個輸齣。輸齣可以是模擬的、數字的或在周邊行為上的一連串事件,可以包含整個角色(如潛水以尋求掩護)、部分角色(如扭頭以響應噪聲)或多個角色(如讓市民們挖更多石頭)。輸齣可以是具體的,也可以是高層的,其中後者將影響許多AI角色的行為,並改變許多決策的進程。
(3)遊戲類型需要的決策整體結構。有的遊戲具有非常簡單或單一性的決策,Robotron遊戲就是一個例子。怪物以一定的速度和運動類型嚮玩傢靠近,並試圖殺死玩傢。在復雜的遊戲中(如《帝國時代》),需要在遊戲中進行許多不同類型的決策,可以使用小組級策略、單元戰術、一係列路徑搜索問題以及其他更深奧的問題,如外交手段等。其中每一個問題都可能代錶AI中的一個子係統,而且這 Irrlicht 3D遊戲引擎程序設計 下載 mobi epub pdf txt 電子書 格式
Irrlicht 3D遊戲引擎程序設計 下載 mobi pdf epub txt 電子書 格式 2024
Irrlicht 3D遊戲引擎程序設計 下載 mobi epub pdf 電子書Irrlicht 3D遊戲引擎程序設計 mobi epub pdf txt 電子書 格式下載 2024