本書以實際項目開發Timeline,完整介紹一個遊戲引擎的所有模塊,從最基礎的OpenGL環境搭建,到骨骼動畫、多線程渲染、陰影實現等等,最後實現一個完整的遊戲引擎。

第1 章介紹遊戲引擎框架,以Unity為例,介紹遊戲引擎組成。
第2 章介紹OpenGL開發環境搭建,創建一個OpenGL空窗口來入坑。
第3 章介紹使用OpenGL繪製三角形、正方形、立方體,來熟悉遊戲渲染的最基礎元素。
第4 章介紹Shader的概念,編譯鏈接,以及Shader格式、關鍵字。
第5 章介紹貼圖格式,從直接讀取PNG、JPG渲染,然後介紹GPU所使用的的壓縮紋理。
第6 章介紹索引與緩衝區對象,索引就是多個頂點的下標,使用索引可以復用頂點渲染。而緩衝區則是將頂點數據存儲於顯存中,不用再每一幀都從內存上傳到GPU。
第7 章介紹引擎自定義的Mesh文件格式以及材質的組成。將原來寫死在代碼中的頂點數據存儲到Mesh文件中,將原來寫死在代碼中的Shader參數存儲到材質中。
第8 章介紹使用Blender製作模型並編寫Python代碼導出為Mesh文件。
第9 章介紹如何實現GameObject-Component模式。
第10 章介紹什麼是相機,以及多相機渲染排序。
第11 章介紹獲取鼠標、鍵盤輸入。
第12 章介紹如何將Demo代碼,拆分為引擎源碼與項目源碼。
第13 章介紹使用FreeType對指定字符生成單Alpha通道的紋理並渲染,以及使用頂點色實現彩色文字。
第14 章介紹基礎GUI控件的實現,包括UIImage、UIMask、UIText、UIButton。有了這幾個基礎,可以實現其他復雜的控件。
第15 章介紹使用FMOD播放MP3、Wav音樂,以及使用FMOD專業音頻編輯器製作音效與解析播放。
第16 章介紹easy_profiler這個C++性能分析庫。
第17 章介紹使用Sol2這個開源庫,將Lua集成到引擎,後續使用C++開發引擎,使用Lua編寫測試代碼。
第18 章介紹骨骼動畫原理,並介紹使用Blender製作骨骼動畫、導出到skeleton_anim文件,在引擎解析。
第19 章介紹骨骼蒙皮動畫,在Blender刷權重,導出到weight文件,在引擎解析,渲染。
第20 章介紹如何從FBX文件導出Mesh、骨骼動畫、權重,實例導出古風少女並渲染。
第21 章介紹多線程渲染,將OpenGL API放到單獨的渲染線程,從主線程發命令到渲染線程,將DrawCall的影響分出去,減輕主線程負擔。
第22 章介紹不定時更新。
寫這本書的目的是普及遊戲引擎基礎知識,面向的讀者有一定的Unity經驗,對引擎某些點感興趣即可。
每一章節介紹的知識點,都是供入門了解,並沒有深挖。
簡單、容易上手、短期目標、不枯燥,是這本書的追求的,太複雜的很容易中途放棄,我花了很多時間在這個上。
每一篇都從入門角度編寫,一些名詞,能和其他名詞關聯的我都會盡量關聯。 例如Shader的編譯與Link,我用C語言的編譯來對比。
| C語言 | Shader | |
|---|---|---|
| 目標硬件 | CPU | GPU |
| 編譯流程 | 創建項目 | 創建GPU程序 |
| 創建編寫多個C代碼文件 | 創建編寫Shader(頂點Shader和片段Shader) | |
| 把C代碼發給編譯器 | 把Shader代碼發送到編譯器 | |
| 編譯C代碼 | 編譯Shader代碼 | |
| 添加到鏈接列表 | 添加到鏈接列表 | |
| 鏈接 | 鏈接 |
每一小節開頭就貼上了這一節項目地址,把文件夾拖到CLion裡面立即可以調試。 
代碼片段開頭標註這個代碼所在文件以及行數。 
從最簡單的三角形繪製,到骨骼動畫渲染、燈光陰影、多線程、物理、尋路AI、音頻解析都會進行介紹。
![]() | ![]() | ![]() |
|---|---|---|
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
這應該是首次在引擎書裡教如何建模、音頻編輯。
Blender建模、FMOD、WWise音頻製作,我都錄製了視頻。
其他的Substance、Toolbag插件開發,Renderdoc DrawCall分析都有簡單介紹。
![]() | ![]() | ![]() |
|---|---|---|
![]() | ![]() | ![]() |
渲染的模型動畫用美女、帥哥、色彩豐富的物體,更有成就感。
有了一定功能後,就會基於現有功能開發一個小遊戲,階段性成就才能長時間堅持。
![]() | ![]() | ![]() |
|---|
在線閱讀: http://www.thisisgame.com.cn/tutorial?book=cpp-game-engine-book&lang=zh&md=Introduction.md
本地搭建: https://github.com/ThisisGame/thisisgame-web-openresty
目前適配Windows與MacOS。
- 由于Arm版Mac只支持OpenGL Core,所以《6.3 OpenGL Core Profile》之前的章节实例无法在Arm版Mac运行。 隨書實例使用CLion開發,CLion支持Windows與Mac,跨平台不需要額外學習成本。
VisualStudio從2019開始支持CMake項目,所以在Windows上也可以使用VisualStudio2019及以上版本打開隨書實例CLion項目。
具體請參考2.3 使用VisualStudio開發
引擎使用C++開發,遵從Google C++規範,貢獻代碼時,需要先熟悉代碼風格。 
貢獻代碼時,請先fork本項目到你的名下,然後修改代碼,通過合併請求來提交。
目前適配Windows和Mac,同樣,你可以在這兩個系統上開發。代碼提交前,請確保功能在這兩個系統上都是正常且一致的。
你可以直接打開在線閱讀: http://www.thisisgame.com.cn/tutorial?book=cpp-game-engine-book&lang=zh&md=Introduction.md
本書是開源的,你可以fork本項目,然後修改代碼,然後提交合併請求。
歡迎大家提Issue,反饋遇到的問題。內網可以直接聯繫我。也可以加入q群(879187705)討論,得到答案後,更新issue,方便其他人查詢。
![]() |
|---|
項目使用CLion IDE,使用PVS-Studio作為代碼掃描分析工具,感謝其提供的開源許可。
![]() | ![]() |
|---|---|
| PVS-Studio | JetBrains |