|
-- 會員 / 註冊 --
|
|
|
|
游戲物理引擎開發 ( 簡體 字) |
作者:(美)米靈頓 著 | 類別:1. -> 遊戲 -> 遊戲程式 |
譯者:徐明亮 等譯 |
出版社:清華大學出版社 | 3dWoo書號: 37680 詢問書籍請說出此書號!【缺書】 NT售價: 395 元 |
出版日:11/1/2013 |
頁數:334 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787302344568 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言: 本人于20世紀80年代踏上游戲編程之路,當時正是8位機風行的年代,低預算與較短的開發周期鼓勵研發人員不斷嘗試和創新,其中不乏某些游戲精品。至今,我依然對兩款游戲印象深刻,它們均采用了真實的物理行為作為游戲體驗的核心內容。 第一款游戲由Jeremy Smith開發,并針對英國BBC Micro家用計算機平臺而發布,即Thrust。該游戲根據街機游戲Gravitar改編,其中藤葉狀船只游弋于地下溶洞之間,且通過2D物理模擬對其加以支配。游戲任務是竊取大型燃料棒,并通過線纜連接至船體。隨后,相對簡單的船體模型演變為兩個大型對象之間的交互行為。游戲本身頗具挑戰性且令人欲罷不能,因而不失為一款經典游戲。 第二款游戲則是Exile,由Peter Irvin和Jeremy Smith聯袂開發。該游戲具有一定的創造性且令人印象深刻,游戲所蘊含的技術亮點已超出了物理范疇,例如游戲對象的過程式構建方式。 游戲Exile中的物理內容體現于游戲中的各個對象上。其中,發射物沿彈道軌跡行進;玩家可投擲手榴彈,且爆炸沖擊波可掀翻周圍物體;玩家可負重前行且身體呈彎曲狀態;另外,玩家還可漂流于水面上。總之,游戲Exile首次采用了相對完整的物理引擎。 盡管游戲Exile發布于1988年,但其物理編碼內容并不落伍。本人于1999年涉足游戲物理引擎程序設計,并在一款賽車游戲中負責車輛模型的物理引擎開發,期待中一個月的開發周期最終變得遙遙無期。 開始階段,物理問題并未引起足夠重視,因而產生了各種各樣的問題。例如,硬質懸掛彈簧將車輛以螺旋方式彈射至無限遠處;摩擦力導致輪胎高速旋轉時產生振動現象;硬質表面呈現為軟質橡膠材質。對此,我曾嘗試了多種處理方案,包括沖量方案、Jacobian方案、規約坐標方案以及模擬物理方案,其學習曲線不同于之前任何游戲編碼經歷。 盡管開發時間超出了最后的期限(開發內容為向第三人稱射擊行為提供物理驅動),但公司人員依然對各個中間件物理系統進行了嚴格檢測,本人也從中了解到各類方案的優缺點。在隨后的開發歲月中,本人所編寫的代碼體現了一定的復用性,并應用于多個不同場合。隨著經驗的不斷積累,本人也研發了多款物理引擎,并為諸多應用制定了相關的物理解決方案。關于如何獲取最為簡單的方案以及最佳物理效果,我自認為具有正確的判斷力。 游戲開發已步入了物理模擬商品化這一階段,即物理模擬常出現于各類游戲中,且開發公司均會研制內部物理庫,或對某一主要的中間件處理方案提供應用許可。盡管物理行為日趨普遍,但其研發階段仍可視為一個黑盒過程,即開發人員負責實現物理行為,其他團隊則直接使用結果。 關于游戲物理學,相關信息以及參考資料均假設讀者具有一定的數學和物理知識。然而,某些著作僅羅列了相應的物理內容,且不包含對應的應用框架結構。更為糟糕的是,一些資料甚至包含了某些錯誤理論,進而使讀者陷入困境。物理引擎通常較為復雜,且存在較大的優化和改良空間,部分內容還有待于進一步探討研究。例如,在讀者嘗試實現Lemke樞軸算法之前,應于先期理解其基本概念并包含相應的代碼測試框架。 本書源自個人初始階段所經歷的種種磨難,同時也希望本書能夠填補這一方面的空白,且兼顧邏輯性和清晰易懂之特征,進而引領讀者從零開始打造一款屬于自己的物理引擎。本書僅是萬里長征中的第一步,但卻是堅實的一步,因為我們已然擁有了正確的方向。 本書附帶光盤 本書附帶光盤包含了源代碼庫,進而實現本書所討論的各項技術以及示例程序。該代碼庫易于閱讀,并輔以注釋和應用示例。 本書附帶光盤中的全部內容已上傳至www.tup.com.cn,請讀者自行下載。 關于作者 Ian Millington,IPR Ventures咨詢公司合伙人,該公司致力于次世代技術的研發工作,涉及娛樂、建模技術以及模擬仿真技術。在此之前,他曾創辦了Mindlathe Ltd(計算機游戲領域內一家最大的專業AI中間件公司),并涉足多種游戲類型以及開發技術。Ian Millington具有深厚的AI專業背景,包括復雜理論和自然計算博士項目研究。除此之外,他還發表了多篇專業學術論文和文章,內容涉及古生物學和超文本技術。同時,他還是Artificial Intelligence for Games一書的作者(該書由Morgan Kaufmann出版社于2006年出版)。 致謝 本書旨在打造一款健壯的游戲物理引擎,該過程歷盡艱辛并得到了編碼人員以及數學家們的巨大幫助,本書的出版源自他們所發表的論文和文章、SIGGRAPH大會演講以及所發布的源代碼。當然,我的感謝名單遠不止于此,這里要著重感謝Chris Hecker,Andrew Watkin和David Barraf,其思想奠定了本書的編寫風格。 感謝本書技術評審小組成員所付出的艱辛勞動,他們是Philip J. Schneider,Jonathan Purdy博士以及Eitan Grinspun,他們的建議極大地提升了本書的編寫質量、可讀性以及有效性。另外,這里還要特別感謝Dave Eberly,他對細節的關注令我受益匪淺。 本書編寫時恰逢R&D咨詢公司創業期,因而本書獻給我的妻子Mel,感謝她兩年來陪我度過無數個不眠之夜。 游戲物理引擎開發 前 言 ·IV· ·V·
|
內容簡介:《游戲物理引擎開發》詳細闡述了與游戲物理引擎相關的高效解決方案及相應的數據結構和算法,主要包括粒子數學、運動定律、粒子物理引擎、合力、彈力、硬約束條件、質體物理引擎、旋轉操作的數學知識、剛體運算定律、剛體物理引擎、碰撞檢測、生成碰撞、碰撞處理方案、靜態接觸和摩擦力、穩定性和優化問題、整合方案以及其他物理引擎等內容。此外,本書還提供了相應的算法、代碼以及偽代碼,以幫助讀者進一步理解相關方案的實現過程。
《游戲物理引擎開發》適合作為高等院校計算機及相關專業的教材和教學參考書,也可作為相關開發人員的自學教材和參考手冊。 |
目錄:第1章 概述 1 1.1 游戲物理 1 1.2 物理引擎 2 1.2.1 物理引擎的優點 3 1.2.2 物理引擎的缺點 3 1.3 物理引擎的實現方案 4 1.3.1 對象類型 4 1.3.2 碰撞處理方案 4 1.3.3 沖量和作用力 5 1.3.4 構建內容 6 1.4 物理引擎中的數學 6 1.4.1 必備的數學知識 6 1.4.2 數學知識回顧 7 1.4.3 本書引入的數學概念 8 1.5 本書源代碼 8 1.6 本書組織方式 9 第1部分 粒 子 物 理 第2章 粒子數學 11 2.1 向量 11 2.1.1 左手空間和右手空間 14 2.1.2 向量和方向 15 2.1.3 標量和向量的乘法運算 17 2.1.4 向量的加法和減法運算 18 2.1.5 向量乘法 20 2.1.6 分量積 20 2.1.7 標量積 21 2.1.8 向量積 24 2.1.9 正交基向量 26 2.2 積分運算 27 2.2.1 微分學 27 2.2.2 積分運算 30 2.3 本章小結 31 第3章 運動定律 32 3.1 粒子 32 3.2 運動定律 33 3.2.1 牛頓第一定律 33 3.2.2 牛頓第二定律 34 3.2.3 力學方程 34 3.2.4 向粒子添加質量 35 3.2.5 動量和速度 36 3.2.6 重力 36 3.3 積分算式 37 3.3.1 更新方程 38 3.3.2 完整的積分算式 39 3.4 本章小結 40 第4章 粒子物理引擎 41 4.1 彈道軌跡 41 4.1.1 設置發射對象屬性 41 4.1.2 實現方法 42 4.2 焰火效果 44 4.2.1 焰火數據 45 4.2.2 焰火效果規則集 46 4.2.3 實現方法 47 4.3 本章小結 50 第2部分 質量集合體物理 第5章 合力 51 5.1 DAlembert定理 51 5.2 作用力發生器 53 5.2.1 接口和多態 54 5.2.2 實現方法 54 5.2.3 重力發生器 57 5.2.4 阻力發生器 57 5.3 內建重力和阻尼機制 59 5.4 本章小結 59 第6章 彈力 60 6.1 胡克定律 60 6.1.1 彈力限制條件 61 6.1.2 彈性材質 61 6.2 彈力發生器 61 6.2.1 基礎型彈力發生器 62 6.2.2 固定彈簧發生器 63 6.2.3 彈性橡皮筋 65 6.2.4 浮力發生器 66 6.3 硬質彈簧 69 6.3.1 硬質彈簧產生的問題 70 6.3.2 仿硬質彈簧 71 6.4 本章小結 75 第7章 硬約束條件 77 7.1 簡單的碰撞解決方案 77 7.1.1 閉合速度 77 7.1.2 回彈系數 78 7.1.3 碰撞法向和碰撞法線 79 7.1.4 沖量 80 7.2 碰撞處理方案 81 7.2.1 碰撞檢測 83 7.2.2 處理相交對象 84 7.2.3 靜態碰撞 87 7.3 碰撞處理算法 90 7.3.1 處理順序 90 7.3.2 時分引擎 93 7.4 類碰撞材質 94 7.4.1 繩索 94 7.4.2 連桿 97 7.5 本章小結 98 第8章 質體物理引擎 100 8.1 引擎概述 100 8.2 使用物理引擎 105 8.2.1 索橋和線纜 105 8.2.2 摩擦力 106 8.2.3 Blob游戲 107 8.3 本章小結 107 第3部分 剛體物理系統 第9章 旋轉操作的數學知識 108 9.1 二維環境下的旋轉對象 108 9.1.2 角速度 110 9.1.3 原點和質心 110 9.2 三維環境中的方向 113 9.2.1 歐拉角 113 9.2.2 軸-角 115 9.2.3 旋轉矩陣 115 9.2.4 四元數 116 9.3 角速度和加速度 117 9.3.1 點速度 118 9.3.2 角加速度 119 9.4 實現方案 119 9.4.1 矩陣類 119 9.4.2 矩陣乘法 120 9.4.3 逆矩陣和轉置矩陣 127 9.4.4 將四元數轉換為矩陣 133 9.4.5 轉換向量 135 9.4.6 調整矩陣中的基向量 138 9.4.7 四元數類 139 9.4.8 四元數的標準化操作 140 9.4.9 四元數組合操作 141 9.4.10 旋轉 142 9.4.11 基于角速度的更新操作 142 9.5 本章小結 143 第10章 剛體運算定律 144 10.1 剛體 144 10.2 基于旋轉的牛頓第二定律 147 10.3 轉矩 147 10.3.1 轉動慣量 148 10.3.2 世界坐標系中的慣性張量 151 10.4 基于旋轉的DAlembert定理 153 10.5 剛體積分運算 158 10.6 本章小結 159 第11章 剛體物理引擎 161 11.1 引擎概述 161 11.2 物理引擎應用 163 11.2.1 飛行模擬器 164 11.2.2 帆船模擬器 168 11.3 本章小結 173 第4部分 碰撞檢測系統 第12章 碰撞檢測 174 12.1 碰撞檢測管線 174 12.2 粗略碰撞檢測 175 12.3 包圍體 175 12.3.1 層次結構 177 12.3.2 構造層次結構 182 12.3.3 子對象層次結構 187 12.4 空間數據結構 188 12.4.1 二分空間劃分 189 12.4.2 八叉樹和四叉樹 192 12.4.3 網格方案 194 12.4.4 多分辨率圖 196 12.5 本章小結 196 第13章 生成碰撞 198 13.1 碰撞幾何體 198 13.1.1 圖元組裝 199 13.1.2 生成碰撞幾何體 199 13.2 碰撞生成過程 200 13.2.1 碰撞數據 201 13.2.2 點-面碰撞 203 13.2.3 邊-邊碰撞 203 13.2.4 邊-面碰撞 204 13.2.5 面-面碰撞 204 13.2.6 前期退出 205 13.3 圖元碰撞算法 205 13.3.1 球體間的碰撞 206 13.3.2 球體和平面之間的碰撞 208 13.3.3 盒體與平面之間的碰撞 211 13.3.4 球體與盒體之間的碰撞 213 13.3.5 盒體間的碰撞 216 13.3.6 效率和通用多面體 223 13.4 本章小結 224 第5部分 接觸型物理系統 第14章 碰撞處理方案 225 14.1 沖量和沖擊轉矩 225 14.1.1 沖擊轉矩 226 14.1.2 旋轉碰撞 227 14.1.3 處理旋轉碰撞 228 14.2 碰撞沖量 228 14.2.1 調整碰撞坐標系 229 14.2.2 基于沖量的速度變化 234 14.2.3 基于速度的沖量變化 237 14.2.4 計算期望速度變化 238 14.2.5 沖量計算 239 14.2.6 沖量應用 239 14.3 處理相交行為 240 14.3.1 方案選取 241 14.3.2 實現非線性投影 243 14.3.3 避免過度的旋轉 245 14.4 碰撞處理過程 247 14.4.1 碰撞處理管線 247 14.4.2 預置碰撞數據 249 14.4.3 處理相交問題 253 14.4.4 處理速度 258 14.4.5 更新算法的替代方案 260 14.5 本章小結 262 第15章 靜態接觸和摩擦力 264 15.1 靜態作用力 264 15.2 微碰撞 266 15.2.1 移除速度 267 15.2.2 減少復原 268 15.2.3 計算最新速度 269 15.3 摩擦力類型 269 15.3.1 靜態摩擦力和動態摩擦力 270 15.3.2 各向同性摩擦力和各向異性摩擦力 272 15.4 摩擦力實現方案 272 15.4.1 基于沖量的摩擦力 273 15.4.2 調整速度處理算法 274 15.4.3 整合方案 279 15.5 碰撞和連續碰撞處理 281 15.6 本章小結 282 第16章 穩定性和優化問題 283 16.1 穩定性 283 16.1.1 四元數漂移 284 16.1.2 斜面上的相交 284 16.1.3 積分穩定性 286 16.1.4 保守碰撞檢測的優點 287 16.1.5 調整數學精確度 288 16.2 優化操作 289 16.2.1 休眠機制 289 16.2.2 相交和速度誤差處理 295 16.2.3 碰撞(接觸)分組機制 297 16.2.4 代碼優化 298 16.3 本章小結 300 第17章 整合方案 301 17.1 引擎綜述 301 17.2 物理引擎應用 302 17.2.1 布娃娃系統 303 17.2.2 斷裂物理學 306 17.2.3 爆炸物理學 310 17.3 引擎的局限性 316 17.3.1 堆砌型對象 316 17.3.2 反作用力摩擦力 316 17.3.3 關節組裝 316 17.3.4 硬質彈簧 317 17.4 本章小結 317
第6部分 擴 展 引 擎 第18章 其他物理引擎 318 18.1 同步碰撞處理 318 18.1.1 Jacobian方案 318 18.1.2 線性互補問題 319 18.2 約化坐標方案 321 18.3 本章小結 322 參考文獻 323 附錄A 常見慣性能量 324 A.1 離散質體 324 A.2 連續質體 324 A.3 常見形狀 325 A.3.1 長方體 325 A.3.2 球體 325 A.3.3 圓柱體 326 A.3.4 圓錐體 326 附錄B 游戲中常見的摩擦系數 327 附錄C 其他程序設計語言 328 C.1 C語言 328 C.2 Java語言 328 C.3 公共語言運行庫(.NET) 329 C.4 Lua語言 329 附錄D 數學背景知識 330 D.1 向量 330 D.2 四元數 331 D.3 矩陣 332 D.4 積分運算 333 D.5 物理運算 333 D.6 其他公式 334 游戲物理引擎開發 目 錄 ·VI· ·XI·
|
序: |
|