-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

游戲編程算法與技巧

( 簡體 字)
作者:劉瀚陽類別:1. -> 遊戲 -> 遊戲程式
譯者:
出版社:電子工業出版社游戲編程算法與技巧 3dWoo書號: 45434
詢問書籍請說出此書號!

缺書
NT售價: 445

出版日:10/1/2016
頁數:296
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121276453
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

推薦序
當瀚陽讓我為他的譯作作序的時候,我還是有些吃驚的。我并非業界名人,雖然在游戲行業摸爬滾打了十幾年,但并沒有多少建樹,為了配得上譯者所散發出的光芒,我多少也要發掘出自己的一些亮點。如果資歷也算亮點的話,我倒是有些的。1993 年我有了自己的第一臺電腦,那時的電腦還處于386 的時代,硬盤不過200MB,內存不過4MB,用著5 英寸的軟驅,光驅還在萌芽狀態。當時我一心想做游戲,玩著《Wolf3D》、《Doom》,仰望著id Soft的成就。2001 年我終于如愿進入了游戲行業,有幸趕上了西山居《月影傳說》的后期開發。之后在三大游戲公司轉了一圈,如今沉浮于手機游戲開發的大潮中。其間也曾參與了兩款3D引擎的早期開發工作,其中的成果已融合在兩三款早已上市的游戲當中。我參與程度最深,也算稍微有點名氣的游戲就是《斗戰神》了。
我和瀚陽相識緣于我們現在共同參與的這個項目,我是項目的第一個客戶端程序員,瀚陽是第二個。當項目還只有我一個前臺程序員的時候,我一個人要面對十幾個美工產出的資源和四五個策劃提出的需求,真是壓力很大。瀚陽的加入仿佛給項目增加了第二臺引擎,各種架構迅速完善起來,功能也越來越完整,項目順利度過了Demo 期,得以立項。瀚陽在游戲開發方面涉獵廣泛,精通多種語言,做過端游,寫過手游,參與過3D 引擎開發。游戲開發之外瀚陽也有著廣泛的興趣,他的博客就是自己搭建的,跑在租用的服務器上,可以稱得上是全棧程序員。游戲行業加班是出了名的,對于瀚陽能在繁忙的工作之余抽出時間來翻譯這本書,我是十分佩服的,每一個程序員都不應該局限于自己所在的公司與工作,而應該在更廣闊的空間拓展自己的職業生涯。
最后回到本書。如果你想進入游戲開發行業,或者對于游戲開發你已經入門但還缺乏一個全面的了解,本書可以作為不錯的入門書籍。本書讀起來不會那么累,能夠使你快速了解游戲開發所涉及的眾多領域,建立一個較為全面的認識。在此之后你可以針對感興趣的方面購買學習更加深入的書籍。
騰訊互娛前臺程序技術指導
陳鵬

譯者序
我與本書的一些緣分
我自己是多年的玩家了。在中學時期就暗自下定決心,一定要做游戲。于是不顧反對,大學選擇了游戲專業,后來通過一套類似XNA 的框架進行開發,在學習的過程中一邊寫游戲,一邊擴展框架。從最初的使用DirectX 繪制2D 精靈開發俄羅斯方塊,到寫3D 骨骼蒙皮動畫做3D 射擊游戲,慢慢地學會了很多技術,比如AI、網絡、物理、腳本等。這些知識是“成長”起來的,于是每學到一點新技術都可以往里面塞,逐漸地形成了自己系統的理解。
雕爺有一篇文章說的好,臨摹是最好的學習方法。因為臨摹不僅需要你拆解分析對象作為輸入,還需要以自己的理解作為輸出。這種帶著主動思考的輸入/輸出,無形中就對臨摹對象有了深刻的理解,這不是走馬觀花那種被動的學習效率能比擬的。這種經過充分思考的練習,最能夠將知識“內化”,而只有站在前人的基礎之上,創新才會比較靠譜。在我看來,本書的內容,屬于手把手地對各種GamePlay 拆解,然后實現,讓知識一點一點地成長起來。更加難得的是,因為作者從業界轉向了教育界,所以本書不僅內容上系統全面,而且語言上簡單清晰,讓人易于理解。
興趣是最好的老師,GamePlay 不像操作系統、渲染引擎、物理引擎那么“枯燥”,本書可以很輕松就讀完。初學者完全可以從GamePlay 入手,在XNA 框架上實現書中的內容,然后在深入的過程中補全游戲開發中各個系統的知識。而有經驗者也可以從本書中補全對游戲軟件的系統理解,比如一開始作者就闡明了游戲程序的三要素:游戲時間、游戲對象、游戲循環,還有一些有意思的訣竅,比如用xyzzy 口訣記住叉乘運算,也有一些案例分析——《魔獸世界》的UI 插件系統,以及工作中的教訓——《指環王》中音頻引擎的設置。
除此之外,本書還提供了專業方向上的參考資料,讓讀者在感興趣的話題上深入學習。每章都會提出關鍵問題并列出有深度的參考資料,這些資料大部分是行業經典,比如像《游戲引擎架構》、Real-Time Rendering 這樣的神作當然沒有錯過。
游戲行業是一個很有意思、充滿朝氣的行業,有很多真正熱愛游戲的人。當然,同時有很多問題,但這何嘗不是機會呢?
劉瀚陽
前言
不久之前,開發商業游戲的知識還只有少數游戲界精英才知道。在那時候,學習真正用于AAA 游戲的算法就像學習一些黑暗禁忌的魔法一樣(比如Michael Abrash 的Graphics ProgrammingBlack Book)。如果一個人想要接受游戲編程教育,那么只能去為數不多的培訓學校。可是10 多年過去之后,游戲編程教育發生了非常大的變化。現在一些頂尖的大學也提供了游戲編程的課程和學位,而且每年加入這個領域的人數也越來越多。
游戲開發課程爆發的結果就是,游戲產業更容易招到需要的人員。21 世紀早期的時候,大多數想參與游戲開發的年輕人都擁有著很強的計算機科學背景及創造游戲的熱情。這些有著良好基礎的年輕人,會在后續工作中不斷學習更加高級的游戲編程技巧。今天,有了更多的專注于游戲教育的地方,大量的游戲公司希望他們的年輕程序員可以擁有游戲編程相關的豐富閱歷。
為什么需要這么一本游戲編程的書
游戲課程的增長也激發出大學課程設計的需求。可是現在市場上大多數的書都只面向兩種讀者:希望利用業余時間做點小游戲的愛好者和有著多年經驗的專業人員。兩種書都會讓在校學生感到迷惑。愛好者系列圖書不夠系統嚴謹,太過專業的書學生又看不懂。
我在南加利福尼亞大學講的其中一門課程是ITP 380:游戲編程。課堂上的學生大多數都是大二或者大三的,懂一點編程。有些學生已經能很熟練地運用GameMaker 或者Unity 開發游戲原型了。但ITP 380 是學生們第一門正式的游戲編程課程。我希望本書能夠成為這種課程的最佳補充。雖然受眾是在校學生,但是其他對游戲編程感興趣的人也能獲得很大價值。
本書的一個特色就是前12 章與任何平臺和框架無關。這就是說,本書適用于大部分語言和平臺。這與市場上其他書籍不一樣,那些書往往因為適用某個版本的框架導致幾年之后就沒用了。正因為這種獨立性,本書將會長期適用。這對大學課程設置來說很有幫助,因為他們運用不同的開發框架和語言。這就是說,示例代碼總是有價值的。也因此,最后兩章會使用兩種不同的框架去開發游戲,之前的示例代碼會在這些游戲上體現。
誰應該讀這本書
本書認為讀者已經掌握一門面向對象編程語言(C++、C#、Java),同時也能熟練運用各種數據結構,比如鏈表、二叉樹及哈希表。這些內容通常在計算機科學的前兩個學期就會學到,因此對于那些已經完成這些課程的人來說閱讀本書是沒問題的。更進一步來講,如果能夠掌握微積分,那么后面的線性代數和物理章節讀者會更容易理解。
雖然不是必需的,但如果讀者提前掌握了基礎的游戲策劃或者有熟悉的游戲會有不少幫助。同時,本書會專門討論某種特定的編程機制,所以閱讀參考資料會有更多收獲。有過GameMaker 制作游戲原型經驗的話會更好,但仍然不是必需的。
雖然本書意在為學校而寫,但是對于已經掌握了通用編程技巧而又對游戲專業感興趣的人來說,會很有幫助。不像一些學院派的理論書籍,書中的話題總是通過例子形象地展開。
最后,因為本書涵蓋非常多話題,對希望掌握游戲編程多個方面的人來說也很有幫助。還有一點需要說明,資深游戲開發者不會在本書中找到太多的最新技術。
本書是怎么組織的
本書的前12 章在游戲實戰中演示了許多算法與技術。這些話題涵蓋2D 到3D、物理學、人工智能、攝像機等。雖然設計上第1 章到第12 章是順序閱讀的,但是有些章節可以直接閱讀。圖P.1 把各章節的依賴關系羅列了出來。所以,最好先閱讀依賴章節。
最后兩章的游戲示例是為了運用前面12 章所學到的算法和技術。兩個示例游戲分別是2D滾軸iOS 游戲(用Objective-C 在Cocos2D 上開發)和PC/Mac/Linux 平臺的3D 塔防游戲(用C# 在XNA/MonoGame 上開發)。兩個游戲的源碼可以在本書的網站上下載:http://gamealgorithms.net。
本書演示風格
這節講本書的一些演示約定,比如代碼和公式。
側邊欄和注意
在本書某些位置你能看到一些“側邊欄”和“注意”版塊,像下面這樣。
(圖P.1 前12 章的依賴關系)
側邊欄
在側邊欄中,會討論某些運用在某款游戲中特定的算法和技術。有時候會是一些我所開發的游戲中的趣聞軼事,也有時候會是其他游戲的。不管怎樣,這里會更加深入地討論這些在真實游戲開發中會遇到問題的概念。
注意
注意里更多的是不相關的有趣內容。雖然它們不是那么相關,但可能會讓我們對話題有更加深刻的認識。
偽代碼
為了保持語言的中立性,算法已經以偽代碼的形式展現。偽代碼的語法與Lua 比較近似,雖然也有點像C++ 和C#。代碼展示會像這樣:
function Update(float deltaTime)
foreach Object o in world
// 注釋
o.Update(deltaTime)
loop
end
代碼高亮與IDE 近似。關鍵詞用藍色,注釋用綠色,類名用藍綠色,變量用斜體。在所有的示例中,訪問都是通過點成員方法和變量實現的。
有些情況下,代碼要被多次討論。在這種情況下,展示的不是代碼的最終版本。通常最后會將所有代碼再展示一次,像清單P.1 那樣。
清單P.1 示例代碼清單
function Update(float deltaTime)
foreach Object o in world
// 注釋
if o is alive
o.Update(deltaTime)
end
loop
end
注意,上面偽代碼中簡單地檢查Object“is alive”,而不是直接調用某個函數。這樣寫會更加清晰。
還有就是,一些代碼可能會由于篇幅原因省略。通常是由于前面剛演示過,中間有大段重復的部分,我們用省略號替代。
function Update(float deltaTime)
// 更新代碼
...
end
公式
一些章節(主要是線性代數、3D 渲染、物理學)會通過公式來解釋。這么做會比使用偽代碼更加清晰易懂。公式會居中處理如下:
?? (??) = ?? + ??
本書網站
本書的網站是http://gamealgorithms.net,內含第13 章和第14 章中游戲的源碼及本書的勘誤。最后,網站中有一個論壇,讀者可以上去提與本書內容或游戲編程相關的問題。
內容簡介:

本書詳細綜述了應用在許多重要視頻游戲編程中的算法和技術。書中采用了一種獨立于平臺和結構的方法,能協助開發幾乎任何風格、語言和框架的游戲,并展現2D和3D圖像、物理、人工智能、相機等工作的基本技術。書中的每個概念都是用C#、Java或 C++程序員直觀明白的偽代碼闡述的,并且作者已經改進和證實過這些偽代碼。本書最后作者詳細分析了兩個完整的游戲,清楚展現了前面章節講到的很多技術和算法。

目錄:

第1章 游戲編程概述1
游戲編程的發展2
Atari時期(1977—1985年) 2
NES和SNES 時期(1985—1995年) 3
PS和PS2時期(1995—2005年) 3
Xbox360、PS3和Wii時期(2005—2013年) 3
游戲的未來4
游戲循環4
傳統的游戲循環4
多線程下的游戲循環6
時間和游戲8
真實時間和游戲時間8
通過處理時間增量來表示游戲邏輯8
游戲對象10
游戲對象的類型10
游戲循環中的游戲對象11
總結13
習題13
相關資料14
游戲編程的發展14
游戲循環14
游戲對象14
第2章 2D 圖形 15
2D渲染基礎16
CRT顯示器基礎16
像素緩沖區和垂直同步17
精靈18
繪制精靈18
動畫精靈20
精靈表單23
滾屏24
單軸滾屏24
無限滾屏26
平行滾屏27
四向滾屏28
磚塊地圖29
簡單的磚塊地圖29
斜視等視角磚塊地圖31
總結32
習題32
相關資料33
Cocos2D 33
SDL 33
第3章 游戲中的線性代數 34
向量35
加法36
減法37
長度、單位向量和正規化38
標量乘積39
點乘40
問題舉例:向量反射41
叉乘43
問題舉例:旋轉一個2D 角色45
線性插值46
坐標系47
矩陣48
加法/減法48
標量乘法49
乘法49
逆矩陣50
轉置50
用矩陣變換3D 向量51
總結52
習題52
相關資料53
第4章 3D圖形54
基礎55
多邊形55
坐標系55
模型坐標系56
世界坐標系56
視角/攝像機坐標系60
投影坐標系62
光照與著色64
顏色64
頂點屬性65
光照67
Phong光照模型68
著色70
可見性71
再探畫家算法72
深度緩沖區73
再探世界變換74
四元數75
3D游戲對象的表示77
總結77
習題77
相關資料78
第5章 游戲輸入 79
輸入設備80
數字輸入80
模擬輸入82
 基于事件的輸入系統84
  基礎事件系統85
  一個更復雜的系統87
 移動設備輸入89
  觸屏和手勢89
  加速器和陀螺儀91
  其他移動設備輸入92
 總結92
 習題92
 相關資料93
第6章 聲音94
 基本聲音95
  原始數據95
  聲音事件95
 3D聲音98
  監聽者和發射者98
  衰減100
  環繞聲100
 數字信號處理101
  常見數字信號處理效果102
  區域標記102
 其他聲音話題103
  多普勒效應103
  聲音遮擋104
 總結105
 習題106
 參考資料106
第7章 物理107
 平面、射線和線段108
  平面108
  射線和線段109
 碰撞幾何體110
  包圍球110
  軸對齊包圍盒111
  朝向包圍盒111
  膠囊體112
  凸多邊形113
  組合碰撞幾何體113
 碰撞檢測113
  球與球的交叉113
  AABB與AABB交叉114
  線段與平面交叉115
  線段與三角片交叉117
  球與平面交叉119
  球形掃掠體檢測120
  響應碰撞124
  優化碰撞125
 基于物理的移動126
  線性力學概覽127
  可變時間步長帶來的問題128
  力的計算128
  歐拉和半隱式歐拉積分129
  Verlet積分法129
  其他積分方法130
  角力學130
 物理中間件130
 總結131
 習題131
 相關資料131
第8章 攝像機 132
 攝像機的類型133
  固定攝像機133
  第一人稱攝像機134
  跟隨攝像機134
  場景切換攝像機135
 透視投影135
  視場136
  寬高比137
 攝像機的實現138
  基礎的跟隨攝像機138
  彈性跟隨攝像機139
  旋轉攝像機142
  第一人稱攝像機144
  樣條攝像機146
 攝像機支持算法149
  攝像機碰撞149
  揀選149
 總結151
 習題151
 相關資料151
第9章 人工智能152
 “真”AI 與游戲AI 153
 尋路153
  搜索空間的表示154
  可接受的啟發式算法156
  貪婪最佳優先算法157
  A*尋路161
  Dijkstra算法163
 基于狀態的行為164
  AI的狀態機164
  基礎的狀態機實現165
  狀態機設計模式167
 策略和計劃168
  策略168
  計劃169
 總結170
 習題170
 相關資料172
  通用AI 172
  尋路172
  狀態172
第10章 用戶界面 173
 菜單系統174
  菜單棧174
  按鈕175
  打字176
 HUD元素177
  路點箭頭177
  準心180
  雷達181
 其他需要考慮的UI 問題186
  支持多套分辨率186
  本地化187
  UI中間件189
  用戶體驗189
 總結189
 習題189
 相關資料190
第11章 腳本語言和數據格式191
 腳本語言192
  折中192
  腳本語言的類型193
  Lua194
  UnrealScript 195
  可視化腳本系統196
 實現一門腳本語言197
  標記化197
  正則表達式198
  語法分析199
  代碼的執行和生成200
 數據格式202
  折中202
  二進制格式203
  INI 203
  XML 203
  JSON 204
 案例學習:《魔獸世界》中的UI Mod 205
  布局和事件205
  行為206
  問題:玩家自動操作206
  問題:UI 兼容性206
  結論207
 總結207
 習題207
 相關資料208
第12章 網絡游戲 209
 協議210
  IP 210
  ICMP 211
  TCP 212
  UDP 214
 網絡拓撲215
  服務器/客戶端216
  點對點218
 作弊219
  信息作弊219
  游戲狀態作弊220
  中間人攻擊220
 總結221
 習題221
 相關資料222
第13章 游戲示例:橫向滾屏者(iOS)223
 概覽224
  Objective-C 224
  Cocos2D 225
 代碼分析226
  AppDelegate 226
  MainMenuLayer 227
  GameplayScene 227
  ScrollingLayer 227
  Ship 228
  Projectile 229
  Enemy 229
  ObjectLayer 229
 練習230
 總結231
第14章 游戲示例:塔防(PC/Mac) 232
 概覽233
  C# 233
  XNA 235
  MonoGame 235
 代碼分析236
  設置236
  單件236
  游戲類237
  游戲狀態237
  游戲對象238
  關卡239
  計時器239
  尋路240
  攝像機和投影241
  輸入241
  物理242
  本地化242
  圖形242
  聲音243
  用戶界面243
 練習245
 總結246
附錄A 習題答案247
附錄B 對開發者有用的工具260
序: