第1章 游戏引擎大比拼 1
1.1 国内热门网络游戏引擎类型统计 2
1.2 Panda3D的前世今生 5
1.3 游戏引擎的发展 6
1.3.1 抽象硬件 7
1.3.2 软件抽象 7
1.4 开源游戏引擎整体比较 8
1.5 知名游戏引擎及代表游戏 11
1.6 游戏引擎的成本与收益 14
1.7 选择游戏引擎的尺度 15
1.8 十大开源游戏引擎深入比较 16
1.9 开源游戏引擎许可证比较 21
1.10 安装Panda3D 24
1.10.1 Windows中的安装 24
1.10.2 Linux中的安装 25
1.11 小结 27
第2章 游戏引擎的开发环境 29
2.1 选择开发环境 30
2.2 安装Eclipse CDT&Pydev 1.6.3 30
2.3 在Python中运行第一个程序 32
2.4 在Linux C++中运行第一个程序 38
2.5 在Visual C++中运行第一个程序 51
2.6 小结 54
第3章 配置Panda3D游戏引擎 55
3.1 Panda3D配置文件 56
3.2 Panda3D1.7 配置变量列表 58
3.3 用C++访问配置变量 82
3.4 用Python访问配置变量 85
3.5 自带工具 87
3.6 用Pview查看模型 89
3.7 小结 94
第4章 管理游戏资产 95
4.1 Egg文件格式 96
4.2 动画模型的约定结构 113
4.3 场景浏览器 116
4.4 导演工具快捷键 120
4.5 管理Autodesk 3ds Max资产 121
4.6 管理Autodesk Maya资产 125
4.7 管理Linux+Blender资产 130
4.8 Bam与Egg模型 132
4.9 演示资源 132
4.10 小结 133
第5章 场景处理 135
5.1 场景节点公共基类 136
5.2 节点类NodePath 138
5.3 场景默认节点及场景基本处理 139
5.4 场景的主要状态 140
5.5 检索场景 143
5.6 场景层次化管理技巧 144
5.7 游戏引擎窗口及框架 147
5.8 用Python处理场景 153
5.9 开发实战——C++版太阳系 156
5.10 小结 166
第6章 模型、地形与角色 167
6.1 模型载入及载入路径 168
6.2 载入角色及动画 170
6.3 基于帧的动画的公共接口及控制 171
6.4 角色与动画的自动绑定 174
6.5 播放动画 178
6.6 动画的混合 180
6.7 角色的多个组成部分 182
6.8 用Python处理模型与角色 186
6.9 地形 190
6.10 用Python处理地形 198
6.11 细节节点 200
6.12 开发实战——C++版拳击机器人 202
6.13 开发实战——C++版看看抓抓 210
6.14 小结 218
第7章 渲染特性与效果 219
7.1 渲染属性概览 220
7.2 灯光 223
7.3 材质 231
7.4 景深缓冲器 234
7.5 雾 235
7.6 Alpha测试 238
7.7 色彩写入掩码 239
7.8 抗走样 240
7.9 重新配色 241
7.10前后表面拣选 245
7.11 灯光缓变 246
7.12 辅助位平面 247
7.13 蜡版测试及写入 248
7.14 渲染效果 253
7.15 指南针效果 254
7.16 公告牌效果 255
7.17 开发实战—C++版迪斯科灯光 257
7.18 开发实战——C++版无底洞 265
7.19 小结 272
第8章 纹理 273
8.1 基本纹理 274
8.2 纹理尺寸 281
8.3 换行模式 282
8.4 纹理过滤器 286
8.5 纹理替换 289
8.6 多纹理 294
8.7 多纹理的模式 298
8.8 纹理组合 305
8.9 纹理变换 306
8.10 自动纹理 309
8.11 投影纹理 313
8.12 环境映射 316
8.13 3D纹理 320
8.14 立方体映射 324
8.15 动画纹理 328
8.16 视频纹理 330
8.17 透明与混合 334
8.18 纹理管理 335
8.19 纹理压缩 335
8.20 开发实战——C++版凹凸贴图 336
8.21 开发实战——C++版纹理交换 343
8.22 小结 350
第9章 着色器 353
9.1 着色器概览 354
9.2 着色器输入 358
9.3 着色器空间坐标 362
9.4 着色器生成器 364
9.5 相机控制 366
9.6 镜头与视野 368
9.7 着色器实战——初始程序 373
9.8 着色器实战——变形与变色 379
9.9 着色器实战——GPU交互控制 381
9.10 着色器实战——灯光漫游初始程序 383
9.11 着色器实战—Cg灯光漫游程序 388
9.12 着色器实战——带衰减的Cg灯光漫游 391
9.13 开发实战——C++版卡通着色 394
9.14 开发实战—C++版发光滤镜 399
9.15 小结 405
第10章 幕与情节的自动处理 407
10.1 全局时钟 408
10.2 幕与幕管理器 410
10.3 幕的自动插值 413
10.4 角色的混合效果 417
10.5 情节 418
10.6 幕的本质 423
10.7 符合重力规律的弹道曲线幕 424
10.8 函数幕 425
10.9 异步任务 426
10.10 任务链 433
10.11 多线程 435
10.12 事件 438
10.13 C++程序主循环 442
10.14 Python程序主循环 443
10.15 开发实战—C++版小行星 444
10.16 开发实战——C++版旋转木马 453
10.17 开发实战——C++版电视机中的茶壶 458
10.18 小结 463
第11章 音频 465
11.1 音频系统的结构 466
11.2 循环控制 467
11.3 音频管理器 468
11.4 DSP音频效果 469
11.5 3D音频效果 471
11.6 音频自动化幕 475
11.7 开发实战—C++版播放多媒体 476
11.8 开发实战——C++版场景扭曲 478
11.9 开发实战——C++版萤火虫 483
11.10 小结 494
第12章 高级交互组件 495
12.1 文本字符集 496
12.2 字体 498
12.3 文本节点 502
12.4 文本节点Python扩展 511
12.5 段落属性多样化 512
12.6 C++交互组件公共基 517
12.7 C++交互组件 521
12.8 Python交互组件 522
12.9 按钮 524
12.10 复选框 526
12.11 单选按钮 527
12.12 对话框 529
12.13 输入框 530
12.14 框架 531
12.15 菜单 532
12.16 滚动列表 534
12.17 进度条 536
12.18 滑块 537
12.19 滚动条 538
12.20 滚动框架 539
12.21 开发实战——C++版音乐盒 540
12.22 小结 545
第13章 游戏引擎内部构造 547
13.1 顶点数据的构成 548
13.2 顶点数据的格式 552
13.3 简单几何形体 556
13.4 几何形体 561
13.5 几何形体节点 563
13.6 几何形体边界 563
13.7 矩阵 565
13.8 自主定义顶点数据格式 566
13.9 生成顶点数据 568
13.10 生成简单几何形体 569
13.11 设置场景 571
13.12 读取几何形体 571
13.13 修改几何形体 574
13.14 网格绘制器 575
13.15 顶点数据读写器 577
13.16 修改纹理图像 578
13.17 保存模型 582
13.18 开发实战——C++版立方体控制 584
13.19 小结 589
第14章 渲染的处理过程 591
14.1 实现渲染过程的主要类 592
14.2 图形管道 593
14.3 图形输出窗口与缓冲器 594
14.4 显示区域 598
14.5 2D显示区域 604
14.6 图形引擎 606
14.7 图形状态监控 608
14.8 管理图形输出对象 614
14.9 渲染次序 615
14.10 渲染生成的纹理 618
14.11 Python过滤器动态管理 621
14.12 动态立方体环境映射 622
14.13 渲染生成纹理的低层API 625
14.14 立体显示区域 627
14.15 多通道渲染 630
14.16 开发实战——C++版影子处理 631
14.17 开发实战——Python过滤器 637
14.18 小结 641
第15章 粒子 643
15.1 粒子渲染器 644
15.2 粒子发射器 646
15.3 粒子工厂 648
15.4 各种粒子 649
15.5 粒子系统 650
15.6 Python粒子面板 651
15.7 力场与力场节点 652
15.8 粒子实战——尘土飞扬 654
15.9 粒子实战——云蒸雾绕 657
15.10 粒子实战——喷泉 659
15.11 粒子实战——烟雾 661
15.12 粒子实战——烟圈 663
15.13 粒子实战——火炬 664
15.14 在Python中使用粒子 666
15.15 在C++中生成粒子 668
15.16 开发实战——C++版分形树 670
15.17 小结 679
第16章 碰撞检测 681
16.1 碰撞形体 682
16.2 碰撞处理器 685
16.3 碰撞实体 690
16.4 碰撞遍历器 692
16.5 碰撞掩码 693
16.6 高速移动的物体 695
16.7 碰撞检测实战——碰撞推处理器 696
16.8 碰撞检测实战——碰撞处理器事件 699
16.9 碰撞检测实战——碰撞掩码及碰撞射线 705
16.10 碰撞检测实战——点击3D物体 712
16.11 开发实战——C++版漫游者 713
16.12 小结 721
第17章 物理系统 723
17.1 启动物理系统 724
17.2 力场 725
17.3 ODE的基本特征 728
17.4 ODE的游戏世界、物体与质量 729
17.5 ODE关节 736
17.6 ODE碰撞检测 742
17.7 NVIDIA Physx的基本特征 751
17.8 开发实战——C++版迷宫滚球 754
17.9 小结 763
第18章 人工智能与有限状态机 765
18.1 系统基本特征 766
18.2 人工智能实战——寻找 767
18.3 人工智能实战——逃离 769
18.4 人工智能实战——追逐 770
18.5 人工智能实战——逃避 773
18.6 人工智能实战——游逛 775
18.7 人工智能实战——羊群 776
18.8 人工智能实战——避障 779
18.9 人工智能实战——路径跟踪 782
18.10 人工智能实战——最短寻径 784
18.11 在C++中实现AI 791
18.12 人工智能C++类 792
18.13 Python有限状态机 793
18.14 带输入的FSM 795
18.15 FSM技巧 797
18.16 开发实战——C++版国际象棋 797
18.17 小结 805
第19章 高级开发杂项 807
19.1 键盘 808
19.2 鼠标 811
19.3 数据报协议基础类 813
19.4 建立客户-服务器连接 816
19.5 传递数据报文 820
19.6 下载文件 821
19.7 分布式网络对象 827
19.8 多媒体文件包 831
19.9 补丁 841
19.10 非标准文件源 842
19.11 跨语言派生子类 843
19.12 调试日志 845
19.13 脚本语言代码质询 848
19.14 开发实战——C++版构造FPS相机 851
19.15 小结 854
第20章 分布式应用 855
20.1 基于P3D文件的分布式应用 856
20.2 基于Web的分布式应用 858
20.3 分布式应用程序的数字签名 860
20.4 配置分布式应用 862
20.5 自安装的分布式应用 863
20.6 Panda3D运行库软件包目录 864
20.7 Panda3D运行库软件包构成 865
20.8 构建系统包宿主机 867
20.9 打补丁 870
20.10 高级脚本技术——检测插件 870
20.11 高级对象标签及插件运行窗口标签 871
20.12 高级脚本技术——插件的通告与回调 872
20.13 高级脚本技术——全局启动对象 874
20.14 高级脚本技术——源安全及运行安全 876
20.15 系统包安装类 877
20.16 开发实战——C++版运动踪迹 878
20.17 小结 883
第21章 性能优化 885
21.1 帧速测量与场景分析 886
21.2 性能测量 888
21.3 性能测量机制分析 894
21.4 刚体组合器 895
21.5 性能优化问题分析——网格过多 897
21.6 性能优化问题分析——文本过频 897
21.7 性能优化问题分析——着色器指令过长 897
21.8 性能优化问题分析——几何形体过多 898
21.9 性能优化问题分析——Python计算过难 899
21.10 性能优化问题分析——其他问题简述 899
21.11 小结 899
第22章 编译游戏引擎源代码 901
22.1 源代码编译的基本依赖 902
22.2 源代码编译的目录结构及依赖 903
22.3 源代码编译的配置变量 906
22.4 Unix及Linux系统源代码编译基本步骤 907
22.5 Windows与Cygwin组合环境源代码编译基本步骤 909
22.6 Windows非Cygwin环境源代码编译基本步骤 910
22.7 测试ppremake编译结果 914
22.8 编译Python接口的步骤细节 915
22.9 快速编译源代码的方法 917
22.10 小结 919
参考文献 921