內容簡介
Panda3D是世界十大開放原始碼遊戲引擎中,功能最完整、效能最穩定、商業化限制最少的一款。目前,迪士尼仍在使用,世界各地的業界人員也以開放、共用全部原始程式碼方式不斷促進這款遊戲引擎的持續發展。在競爭激烈的國外遊戲引擎市場中,Panda3D始終引人注目,技術領先。
本書為讀者深入、完整掌握遊戲引擎C++、Python核心,書附程式中有80多段示範效果,為Windows、Linux、Mac作業系統中的C++、Python遊戲引擎開發者提供價值無窮的資源。作者結合深入的專業知識及多年的實作開發經驗,重點針對市場、讀者技術實作需求撰寫此書,相信讀者能夠輕鬆掌握Panda3D的使用技巧,簡單快速地步入3D應用程式開發新天地。
本書為讀者深入、完整掌握遊戲引擎C++、Python核心,書附程式中有80多段示範效果,為Windows、Linux、Mac作業系統中的C++、Python遊戲引擎開發者提供價值無窮的資源。作者結合深入的專業知識及多年的實作開發經驗,重點針對市場、讀者技術實作需求撰寫此書,相信讀者能夠輕鬆掌握Panda3D的使用技巧,簡單快速地步入3D應用程式開發新天地。
作者簡介
劉暉
上海嘉趣多媒體科技有限公司CEO。西安交通大學電腦軟體博士,上海交通大學電腦軟體博士後,RHCE。曾先後擔任東華大學副教授、上海三零衛士資訊安全有限公司企業部副CTO、中國科學院上海高等研究院科技處專案主管等職。目前致力於3D產業的科技、服務、商貿活動,同時支援3D遊戲引擎的可持續、開放原始碼、免費、商業化運作。塑造並追求「時尚歡樂美好趣味」的企業文化。
林欣
東華大學資訊學院教師、上海嘉趣多媒體科技有限公司兼職培訓師。西安電子科技大學圖形影像處理碩士。曾先後就職于西安交通大學、東華大學。目前關注3D產業的技術普及推廣活動,積極推動3D遊戲引擎的共用發展。崇尚科技美化生活。
李強
上海嘉趣多媒體科技有限公司副總經理。畢業于西安電子科技大學。曾先後就職於陝西省機械設備進出口公司和中興通訊股份有限公司。愛好旅遊、文學和羽毛球運動,足跡遍及40多個國家和國內大江南北。目前致力於3D產業的科技、服務、商貿活動,積極支援3D遊戲引擎技術與資源分享。崇尚自由、多彩、率性、現代的數字生活。
上海嘉趣多媒體科技有限公司CEO。西安交通大學電腦軟體博士,上海交通大學電腦軟體博士後,RHCE。曾先後擔任東華大學副教授、上海三零衛士資訊安全有限公司企業部副CTO、中國科學院上海高等研究院科技處專案主管等職。目前致力於3D產業的科技、服務、商貿活動,同時支援3D遊戲引擎的可持續、開放原始碼、免費、商業化運作。塑造並追求「時尚歡樂美好趣味」的企業文化。
林欣
東華大學資訊學院教師、上海嘉趣多媒體科技有限公司兼職培訓師。西安電子科技大學圖形影像處理碩士。曾先後就職于西安交通大學、東華大學。目前關注3D產業的技術普及推廣活動,積極推動3D遊戲引擎的共用發展。崇尚科技美化生活。
李強
上海嘉趣多媒體科技有限公司副總經理。畢業于西安電子科技大學。曾先後就職於陝西省機械設備進出口公司和中興通訊股份有限公司。愛好旅遊、文學和羽毛球運動,足跡遍及40多個國家和國內大江南北。目前致力於3D產業的科技、服務、商貿活動,積極支援3D遊戲引擎技術與資源分享。崇尚自由、多彩、率性、現代的數字生活。
內容目錄
01遊戲引擎大比拼
1.1 國內熱門網路遊戲引擎類型統計
1.2 PANDA3D 的前世今生
1.3 遊戲引擎的發展
1.3.1 抽象硬體
1.3.2 軟體抽象
1.4 開放原始碼遊戲引擎整體比較
1.5 知名遊戲引擎及代表遊戲
1.6 遊戲引擎的成本與收益
1.7 選擇遊戲引擎的尺度
1.8 十大開放原始碼遊戲引擎深入比較
1.9 開放原始碼遊戲引擎授權比較
1.10 安裝PANDA3D
1.10.1 WINDOWS 中的安裝
1.10.2 LINUX 中的安裝
1.11 小結
02 遊戲引擎的開發環境
2.1 選擇開發環境
2.2 安裝ECLIPSE CDT & PYDEV 1.6.3
2.3 在PYTHON 中執行第一個程式
2.4 在LINUX C++ 中執行第一個程式
2.5 在VISUAL C++ 中執行第一個程式
2.6 小結
03 設定PANDA3D 遊戲引擎
3.1 PANDA3D 設定檔
3.2 PANDA3D 1.7 設定變數清單
3.3 用C++ 存取設定變數
3.4 用PYTHON 存取設定變數
3.5 附帶工具
3.6 用PVIEW 檢視模型
3.7 小結
04 管理遊戲資產
4.1 EGG 檔案格式
4.2 動畫模型的約定結構
4.3 場景瀏覽器
4.4 導演工具快速鍵
4.5 管理AUTODESK 3DS MAX 資產
4.6 管理AUTODESK MAYA 資產
4.7 管理LINUX+BLENDER 資產
4.8 BAM 與EGG 模型
4.9 示範資源
4.10 小結
05 場景處理
5.1 場景節點公共基礎類別
5.2 節點類別NODEPATH
5.3 場景預設節點及場景基本處理
5.4 場景的主要狀態
5.5 檢索場景
5.6 場景層次化管理技巧
5.7 遊戲引擎視窗及框架
5.8 用PYTHON 處理場景
5.9 開發實戰——C++ 版太陽系
5.10 小結
06 模型、地形與角色
6.1 模型載入及載入路徑
6.2 載入角色及動畫
6.3 以框為基礎的動畫的公共介面及控制
6.4 角色與動畫的自動綁定
6.5 播放動畫
6.6 動畫的混合
6.7 角色的多個組成部分
6.8 用PYTHON 處理模型與角色
6.9 地形
6.10 用PYTHON 處理地形
6.11 細節節點
6.12 開發實戰——C++ 版拳擊機器人
6.13 開發實戰——C++ 版看看抓抓
6.14 小結
07 繪製特性與效果
7.1 繪製屬性概覽
7.2 燈光
7.3 材質
7.4 景深緩衝器
7.5 霧
7.6 ALPHA 測試
7.7 色彩寫入隱藏
7.8 反鋸齒
7.9 重新配色
7.10 前後表面揀選
7.11 燈光漸變
7.12 輔助位平面
7.13 模版測試及寫入
7.14 繪製效果
7.15 指南針效果
7.16 公告欄效果
7.17 開發實戰——C++ 版迪斯可燈光
7.18 開發實戰——C++ 版無底洞
7.19 小結
08 紋理
8.1 基本紋理
8.2 紋理尺寸
8.3 換行模式
8.4 紋理篩檢程式
8.5 紋理取代
8.6 多紋理
8.7 多紋理的模式
8.8 紋理組合
8.9 紋理轉換
8.10 自動紋理
8.11 投影紋理
8.12 環境對映
8.13 3D 紋理
8.14 立方體對映
8.15 動畫紋理
8.16 視訊紋理
8.17 透明與混合
8.18 紋理管理
8.19 紋理壓縮
8.20 開發實戰——C++ 版凹凸貼圖
8.21 開發實戰——C++ 版紋理交換
8.22 小結
09 著色器
9.1 著色器概覽
9.2 著色器輸入
9.3 著色器空間座標
9.4 著色器產生器
9.5 相機控制
9.6 鏡頭與視野
9.7 著色器實戰——初始程式
9.8 著色器實戰——變形與變色
9.9 著色器實戰——GPU 互動控制
9.10 著色器實戰——燈光漫遊初始程式
9.11 著色器實戰——CG 燈光漫遊程式
9.12 著色器實戰——可衰減的CG 燈光漫遊
9.13 開發實戰——C++ 版卡通著色
9.14 開發實戰——C++ 版發光濾鏡
9.15 小結
10 幕與情節的自動處理
10.1 全域時脈
10.2 幕與幕管理員
10.3 幕的自動內插
10.4 角色的混合效果
10.5 情節
10.6 幕的本質
10.7 符合重力規律的彈道曲線幕
10.8 函數幕
10.9 非同步工作
10.10 工作鏈
10.11 多執行緒
10.12 事件
10.13 C++ 程式主循環
10.14 PYTHON 程式主循環
10.15 開發實戰——C++ 版小行星
10.16 開發實戰——C++ 版旋轉木馬
10.17 開發實戰——C++ 版電視機中的茶壺
10.18 小結
11 音訊
11.1 音訊系統的結構
11.2 循環控制
11.3 音訊管理員
11.4 DSP 音訊效果
11.5 3D 音訊效果
11.6 音訊自動化幕
11.7 開發實戰——C++ 版播放多媒體
11.8 開發實戰——C++ 版場景扭曲
11.9 開發實戰——C++ 版螢火蟲
11.10 小結
12 進階互動元件
12.1 文字字元集
12.2 字型
12.3 文字節點
12.4 文字節點PYTHON 擴充
12.5 段落屬性多樣化
12.6 C++ 互動元件公有基礎類別
12.7 C++ 互動元件
12.8 PYTHON 互動元件
12.9 按鈕
12.10 核取按鈕
12.11 選項按鈕
12.12 交談視窗
12.13 輸入框
12.14 框架
12.15 選單
12.16 捲動列表
12.17 進度指示器
12.18 滑桿
12.19 捲軸
12.20 捲動框架
12.21 開發實戰——C++ 版音樂盒
12.22 小結
13 遊戲引擎內部建構
13.1 頂點資料的組成
13.2 頂點資料的格式
13.3 簡單幾何形體
13.4 幾何形體
13.5 幾何形體節點
13.6 幾何形體邊界
13.7 矩陣
13.8 自行定義頂點資料格式
13.9 產生頂點資料
13.10 產生簡單幾何形體
13.11 設定場景
13.12 讀取幾何形體
13.13 修改幾何形體
13.14 網格繪製器
13.15 頂點資料讀寫器
13.16 修改紋理影像
13.17 儲存模型
13.18 開發實戰——C++ 版立方體控制
13.19 小結
14 繪製的處理過程
14.1 實現繪製過程的主要類別
14.2 圖形管線
14.3 圖形輸出視窗與緩衝器
14.4 顯示區域
14.5 2D 顯示區域
14.6 圖形引擎
14.7 圖形狀態監控
14.8 管理圖形輸出物件
14.9 繪製次序
14.10 繪製產生的紋理
14.11 PYTHON 篩檢程式動態管理
14.12 動態立方體環境對映
14.13 繪製產生紋理的低層API
14.14 立體顯示區域
14.15 多通道繪製
14.16 開發實戰——C++ 版影子處理
14.17 開發實戰——PYTHON 篩檢程式
14.18 小結
15 粒子
15.1 粒子繪製器
15.2 粒子發射器
15.3 粒子工廠
15.4 各種粒子
15.5 粒子系統
15.6 PYTHON 粒子面板
15.7 力場與力場節點
15.8 粒子實戰——塵土飛揚
15.9 粒子實戰——雲蒸霧繞
15.10 粒子實戰——噴泉
15.11 粒子實戰——煙霧
15.12 粒子實戰——煙圈
15.13 粒子實戰——火炬
15.14 在PYTHON 中使用粒子
15.15 在C++ 中產生粒子
15.16 開發實戰——C++ 版分枝樹
15.17 小結
16 碰撞檢測
16.1 碰撞形體
16.2 碰撞處理器
16.3 碰撞實體
16.4 碰撞檢查器
16.5 碰撞隱藏
1.1 國內熱門網路遊戲引擎類型統計
1.2 PANDA3D 的前世今生
1.3 遊戲引擎的發展
1.3.1 抽象硬體
1.3.2 軟體抽象
1.4 開放原始碼遊戲引擎整體比較
1.5 知名遊戲引擎及代表遊戲
1.6 遊戲引擎的成本與收益
1.7 選擇遊戲引擎的尺度
1.8 十大開放原始碼遊戲引擎深入比較
1.9 開放原始碼遊戲引擎授權比較
1.10 安裝PANDA3D
1.10.1 WINDOWS 中的安裝
1.10.2 LINUX 中的安裝
1.11 小結
02 遊戲引擎的開發環境
2.1 選擇開發環境
2.2 安裝ECLIPSE CDT & PYDEV 1.6.3
2.3 在PYTHON 中執行第一個程式
2.4 在LINUX C++ 中執行第一個程式
2.5 在VISUAL C++ 中執行第一個程式
2.6 小結
03 設定PANDA3D 遊戲引擎
3.1 PANDA3D 設定檔
3.2 PANDA3D 1.7 設定變數清單
3.3 用C++ 存取設定變數
3.4 用PYTHON 存取設定變數
3.5 附帶工具
3.6 用PVIEW 檢視模型
3.7 小結
04 管理遊戲資產
4.1 EGG 檔案格式
4.2 動畫模型的約定結構
4.3 場景瀏覽器
4.4 導演工具快速鍵
4.5 管理AUTODESK 3DS MAX 資產
4.6 管理AUTODESK MAYA 資產
4.7 管理LINUX+BLENDER 資產
4.8 BAM 與EGG 模型
4.9 示範資源
4.10 小結
05 場景處理
5.1 場景節點公共基礎類別
5.2 節點類別NODEPATH
5.3 場景預設節點及場景基本處理
5.4 場景的主要狀態
5.5 檢索場景
5.6 場景層次化管理技巧
5.7 遊戲引擎視窗及框架
5.8 用PYTHON 處理場景
5.9 開發實戰——C++ 版太陽系
5.10 小結
06 模型、地形與角色
6.1 模型載入及載入路徑
6.2 載入角色及動畫
6.3 以框為基礎的動畫的公共介面及控制
6.4 角色與動畫的自動綁定
6.5 播放動畫
6.6 動畫的混合
6.7 角色的多個組成部分
6.8 用PYTHON 處理模型與角色
6.9 地形
6.10 用PYTHON 處理地形
6.11 細節節點
6.12 開發實戰——C++ 版拳擊機器人
6.13 開發實戰——C++ 版看看抓抓
6.14 小結
07 繪製特性與效果
7.1 繪製屬性概覽
7.2 燈光
7.3 材質
7.4 景深緩衝器
7.5 霧
7.6 ALPHA 測試
7.7 色彩寫入隱藏
7.8 反鋸齒
7.9 重新配色
7.10 前後表面揀選
7.11 燈光漸變
7.12 輔助位平面
7.13 模版測試及寫入
7.14 繪製效果
7.15 指南針效果
7.16 公告欄效果
7.17 開發實戰——C++ 版迪斯可燈光
7.18 開發實戰——C++ 版無底洞
7.19 小結
08 紋理
8.1 基本紋理
8.2 紋理尺寸
8.3 換行模式
8.4 紋理篩檢程式
8.5 紋理取代
8.6 多紋理
8.7 多紋理的模式
8.8 紋理組合
8.9 紋理轉換
8.10 自動紋理
8.11 投影紋理
8.12 環境對映
8.13 3D 紋理
8.14 立方體對映
8.15 動畫紋理
8.16 視訊紋理
8.17 透明與混合
8.18 紋理管理
8.19 紋理壓縮
8.20 開發實戰——C++ 版凹凸貼圖
8.21 開發實戰——C++ 版紋理交換
8.22 小結
09 著色器
9.1 著色器概覽
9.2 著色器輸入
9.3 著色器空間座標
9.4 著色器產生器
9.5 相機控制
9.6 鏡頭與視野
9.7 著色器實戰——初始程式
9.8 著色器實戰——變形與變色
9.9 著色器實戰——GPU 互動控制
9.10 著色器實戰——燈光漫遊初始程式
9.11 著色器實戰——CG 燈光漫遊程式
9.12 著色器實戰——可衰減的CG 燈光漫遊
9.13 開發實戰——C++ 版卡通著色
9.14 開發實戰——C++ 版發光濾鏡
9.15 小結
10 幕與情節的自動處理
10.1 全域時脈
10.2 幕與幕管理員
10.3 幕的自動內插
10.4 角色的混合效果
10.5 情節
10.6 幕的本質
10.7 符合重力規律的彈道曲線幕
10.8 函數幕
10.9 非同步工作
10.10 工作鏈
10.11 多執行緒
10.12 事件
10.13 C++ 程式主循環
10.14 PYTHON 程式主循環
10.15 開發實戰——C++ 版小行星
10.16 開發實戰——C++ 版旋轉木馬
10.17 開發實戰——C++ 版電視機中的茶壺
10.18 小結
11 音訊
11.1 音訊系統的結構
11.2 循環控制
11.3 音訊管理員
11.4 DSP 音訊效果
11.5 3D 音訊效果
11.6 音訊自動化幕
11.7 開發實戰——C++ 版播放多媒體
11.8 開發實戰——C++ 版場景扭曲
11.9 開發實戰——C++ 版螢火蟲
11.10 小結
12 進階互動元件
12.1 文字字元集
12.2 字型
12.3 文字節點
12.4 文字節點PYTHON 擴充
12.5 段落屬性多樣化
12.6 C++ 互動元件公有基礎類別
12.7 C++ 互動元件
12.8 PYTHON 互動元件
12.9 按鈕
12.10 核取按鈕
12.11 選項按鈕
12.12 交談視窗
12.13 輸入框
12.14 框架
12.15 選單
12.16 捲動列表
12.17 進度指示器
12.18 滑桿
12.19 捲軸
12.20 捲動框架
12.21 開發實戰——C++ 版音樂盒
12.22 小結
13 遊戲引擎內部建構
13.1 頂點資料的組成
13.2 頂點資料的格式
13.3 簡單幾何形體
13.4 幾何形體
13.5 幾何形體節點
13.6 幾何形體邊界
13.7 矩陣
13.8 自行定義頂點資料格式
13.9 產生頂點資料
13.10 產生簡單幾何形體
13.11 設定場景
13.12 讀取幾何形體
13.13 修改幾何形體
13.14 網格繪製器
13.15 頂點資料讀寫器
13.16 修改紋理影像
13.17 儲存模型
13.18 開發實戰——C++ 版立方體控制
13.19 小結
14 繪製的處理過程
14.1 實現繪製過程的主要類別
14.2 圖形管線
14.3 圖形輸出視窗與緩衝器
14.4 顯示區域
14.5 2D 顯示區域
14.6 圖形引擎
14.7 圖形狀態監控
14.8 管理圖形輸出物件
14.9 繪製次序
14.10 繪製產生的紋理
14.11 PYTHON 篩檢程式動態管理
14.12 動態立方體環境對映
14.13 繪製產生紋理的低層API
14.14 立體顯示區域
14.15 多通道繪製
14.16 開發實戰——C++ 版影子處理
14.17 開發實戰——PYTHON 篩檢程式
14.18 小結
15 粒子
15.1 粒子繪製器
15.2 粒子發射器
15.3 粒子工廠
15.4 各種粒子
15.5 粒子系統
15.6 PYTHON 粒子面板
15.7 力場與力場節點
15.8 粒子實戰——塵土飛揚
15.9 粒子實戰——雲蒸霧繞
15.10 粒子實戰——噴泉
15.11 粒子實戰——煙霧
15.12 粒子實戰——煙圈
15.13 粒子實戰——火炬
15.14 在PYTHON 中使用粒子
15.15 在C++ 中產生粒子
15.16 開發實戰——C++ 版分枝樹
15.17 小結
16 碰撞檢測
16.1 碰撞形體
16.2 碰撞處理器
16.3 碰撞實體
16.4 碰撞檢查器
16.5 碰撞隱藏