游戏编程精粹1-6分类目录之通用编程技术部分

游戏编程精粹1-6分类目录之通用编程技术部分

----------第一册-------------------------
第1章 通用编程技术
1.0 神奇的数据驱动设计(Steve Rabin) 3
1.0.1 点子1——基础 3
1.0.2 点子2——最低标准 3
1.0.3 点子3——杜绝硬编码 3
1.0.4 点子4——将控制流写成脚本 4
1.0.5 点子5——什么时候不适合使用脚本? 5
1.0.6 点子6——避免重复数据 5
1.0.7 点子7——开发工具来生成数据 6
1.0.8 结论 6
1.1 面向对象的编程与设计技术(James Boer) 7
1.1.1 代码风格 7
1.1.2 类设计 9
1.1.3 类层次结构设计 10
1.1.4 设计模式 10
1.1.5 总结 16
1.1.6 参考资料 16
1.2 使用模板元编程的快速数学方法(Pete Isensee) 17
1.2.1 斐波纳契数 17
1.2.2 阶乘 18
1.2.3 三角学 19
1.2.4 实际世界中的编译程序 20
1.2.5 重访三角学 21
1.2.6 模板和标准C++ 21
1.2.7 矩阵 21
1.2.8 总结 26
1.2.9 参考文献 31
1.3 一种自动的Singleton工具(Scott Bilas) 32
1.3.1 定义 32
1.3.2 优点 32
1.3.3 问题 33
1.3.4 传统的解决方法 33
1.3.5 较好的方法 33
1.3.6 更好的方法 34
1.3.7 参考文献 35
1.4 在游戏编程中使用STL(James Boer) 36
1.4.1 STL的类型和术语 36
1.4.2 STL概念 37
1.4.3 向量(Vector) 38
1.4.4 链表(List) 40
1.4.5 双队列(Deque) 42
1.4.6 映射表(Map) 43
1.4.7 堆栈(Stack),队列(Queue)和优先队列(Priority Queue) 46
1.4.8 总结 47
1.4.9 参考文献 47
1.5 一个通用的函数绑定接口(Scott Bilas) 48
1.5.1 要求 48
1.5.2 关于平台 48
1.5.3 第一次尝试 49
1.5.4 第二次尝试 50
1.5.5 部分解决方法 51
1.5.6 调用约定 52
1.5.7 调用函数 54
1.5.8 完备解决方案 55
1.5.9 结论 56
1.5.10 参考文献 57
1.6 通用的基于句柄的资源管理器(Scott Bilas) 58
1.6.1 方法 58
1.6.2 Handle类 59
1.6.3 HandleMgr类 60
1.6.4 使用示例 61
1.6.5 注意 61
1.6.6 参考文献 68
1.7 资源和内存管理(James Boer) 69
1.7.1 资源类 69
1.7.2 资源管理类 71
1.7.3 句柄如何工作 74
1.7.4 可能的扩展和改进 74
1.7.5 结论 75
1.8 快速数据载入技巧(John Olsen) 76
1.8.1 预处理你的数据 76
1.8.2 保存你的数据 76
1.8.3 使用简单方法载入你的数据 77
1.8.4 更安全地载入你的数据 78
1.9 基于帧的内存分配(Steven Ranck) 80
1.9.1 常规内存分配的挑战 80
1.9.2 介绍基于帧的内存 80
1.9.3 分配和释放内存 82
1.9.4 例子 84
1.9.5 结论 86
1.10 简单快速的位数组(Andrew Kirmse) 87
1.10.1 概述 87
1.10.2 位数组 87
1.10.3 其他数组 88
1.10.4 应用 89
1.10.5 参考文献 89
1.11 在线游戏的网络协议(Andrew Kirmse) 90
1.11.1 定义 90
1.11.2 篡改报文 90
1.11.3 报文重放 91
1.11.4 其他技术 92
1.11.5 逆向工程 92
1.11.6 实现 93
1.11.7 参考文献 93
1.12 最大限度地利用Assert(Steve Rabin) 94
1.12.1 Assert基础 94
1.12.2 Assert技巧 #1:嵌入更多信息 95
1.12.3 Assert技巧 #2:嵌入更多更多信息 95
1.12.4 Assert技巧 #3:使之更好用一些 96
1.12.5 Assert技巧 #4:编写自己的assert宏 96
1.12.6 Assert技巧 #5:无价之宝 97
1.12.7 Assert技巧 #6:给“超级铁杆” 97
1.12.8 Assert技巧 #7:让它更简单——复制和粘贴 98
1.12.9 参考文献 98
1.13 Stats:实时统计和游戏内调试(John Olsen) 99
1.13.1 Why:需求驱动的技术 99
1.13.2 How:一个进化过程 100
1.13.3 What:一个基于C++类的系统 100
1.13.4 Where:可用性 102
1.13.5 小结 102
1.14 实时的游戏内建剖析(Steve Rabin) 103
1.14.1 开始考虑细节 103
1.14.2 剖析器将告诉你什么? 104
1.14.3 增加剖析器调用 105
1.14.4 剖析器的实现 106
1.14.5 ProfileBegin的细节 107
1.14.6 ProfileEnd的细节 107
1.14.7 处理剖析数据的细节 107
1.14.8 后期增强 108
1.14.9 将它们组合起来 108
1.14.10 参考文献 113

-------------------第二册----------------------
第1章 通用编程技术
绪论 Scott Bilas 3
1.1 优化C++游戏 Andrew Kirmse 5
1.1.1 对象的创建和销毁 5
1.1.2 内存管理 8
1.1.3 虚拟函数 9
1.1.4 代码长度 10
1.1.5 标准模板库 11
1.1.6 高级特性 12
1.1.7 参考文献 13
1.2 内联函数和宏 Peter Dalton 14
1.2.1 内联函数的优点 14
1.2.2 何时使用内联函数 15
1.2.3 何时使用宏 16
1.2.4 微软特有的情况 16
1.2.5 参考文献 17
1.3 抽象接口编程 Noel Liopis 18
1.3.1 抽象接口 18
1.3.2 添加一个工厂(factory) 19
1.3.3 抽象接口特性 21
1.3.4 一切都是有代价的 23
1.3.5 结论 24
1.3.6 参考文献 24
1.4 从DLL中导出C++类 Herb Marselas 25
1.4.1 导出函数 25
1.4.2 导出类 25
1.4.3 导出类成员函数 27
1.4.4 导出虚拟类成员函数 27
1.4.5 总结 28
1.5 避免DLL困境 Herb Marselas 29
1.5.1 显式链接还是隐式链接 29
1.5.2 LoadLibrary和GetProcAddress 30
1.5.3 提防DirectX 30
1.5.4 使用操作系统特有的特性 31
1.5.5 总结 32
1.6 动态类型信息 Scott Wakeling 34
1.6.1 动态类型信息类简介 34
1.6.2 暴露和查询DTI 35
1.6.3 继承的含义是“是一个” 36
1.6.4 处理通用对象 37
1.6.5 实现永久性类型信息 38
1.6.6 将永久性类型信息用于游戏保存数据库中 39
1.6.7 结论 40
1.6.8 参考文献 40
1.7 用于通用C++成员访问的属性类 Charles Cafrelli 41
1.7.1 代码 41
1.7.2 其他用途 44
1.7.3 推荐读物 44
1.8 一个游戏实体工厂 Fran?ois Dominic Laramée 45
1.8.1 组件 45
1.8.2 flyweight类、行为类和导出类 45
1.8.3 flyweight对象 46
1.8.4 SAMMy,你在哪里? 46
1.8.5 行为类层次 47
1.8.6 使用模板方法模式来完成行为任务 48
1.8.7 导出类 49
1.8.8 实体工厂 50
1.8.9 在运行阶段选择策略 52
1.8.10 最后的注意事项 53
1.8.11 参考文献 53
1.9 在C++添加摒弃功能 Noel Llopis 55
1.9.1 可能的解决方案 55
1.9.2 理想的解决方案 55
1.9.3 使用和指定被摒弃的函数 56
1.9.4 使用C++实现摒弃功能 56
1.9.5 可改进的地方 58
1.9.6 致谢 58
1.9.7 参考文献 58
1.10 一个插入式调试内存管理器 Peter Dalton 59
1.10.1 内存管理器初步 59
1.10.2 内存管理器的记录工作 60
1.10.3 报告信息 62
1.10.4 注意事项 63
1.10.5 进一步的改进 64
1.10.6 参考文献 64
1.11 一个内置的游戏剖析模块 Jeff Evertt 66
1.11.1 有关剖析的基本知识 66
1.11.2 商用工具 67
1.11.3 为何要自己开发模块 67
1.11.4 剖析模块(Profiling module)的需求 68
1.11.5 架构和实现 68
1.11.6 实现的细节 69
1.11.7 分析数据 69
1.11.8 有关实现的注意事项 70
1.12 用于Windows游戏的线性编程模型 Javier F. Otaegui 71
1.12.1 更新背景 71
1.12.2 解决方案:多线程(Multithreading) 72
1.12.3 参考文献 75
1.13 栈缠绕 Bryon Hapgood 76
1.13.1 简单的TempRet 76
1.13.2 TempRet链 77
1.13.3 Thunking 78
1.13.4 递归 80
1.14 自我修改的代码 Bryon Hapgood 82
1.14.1 RAM代码的原理 82
1.14.2 一个快速的Bit Blitter 83
1.15 使用资源文件来管理文件 Bruno Sousa 91
1.15.1 何为资源文件 91
1.15.2 设计 92
1.15.3 实现 93
1.15.4 有关实现的最后一些说明 94
1.15.5 结论 95
1.15.6 参考文献 95
1.16 游戏输入的记录和重放 Bruce Dawson 96
1.16.1 记录输入有何用途 96
1.16.2 原理 97
1.16.3 测试输入记录功能 100
1.16.4 结论 100
1.16.5 参考文献 101
1.17 一个灵活的文本分析系统 James Boer 102
1.17.1 分析系统 102
1.17.2 宏、头文件和预处理技术 103
1.17.3 该分析系统的结构 104
1.17.4 小结 106
1.18 一个通用的调节器 Lasse Staff Jensen 107
1.18.1 需求分析 107
1.18.2 实现 107
1.18.3 使用 112
1.18.4 图形用户界面 112
1.18.5 附注 114
1.18.6 致谢 114
1.19 生成真正的随机数 Pete Isensee 115
1.19.1 伪随机 115
1.19.2 真正随机 115
1.19.3 随机输入源 116
1.19.4 硬件源 116
1.19.5 混合函数 117
1.19.6 局限性 117
1.19.7 实现 117
1.19.8 GenRand的随机程度 119
1.19.9 参考文献 119
1.20 使用Bloom过滤器来提高计算性能 Mark Fischer 120
1.20.1 Bloom的方式 120
1.20.2 可能的情形 120
1.20.3 工作原理 121
1.20.4 定义 121
1.20.5 范例1 121
1.20.6 范例2 125
1.20.7 最后的说明 125
1.20.8 结论 126
1.20.9 参考文献 126
1.21 3Ds MAX中的Skin导出器和动画工具包 Marco Tombesi 127
1.21.1 导出 128
1.21.2 参考文献 137
1.22 在视频游戏中使用Web摄像机 Nathan d'Obrenan 138
1.22.1 初始化Web摄像机捕获窗口 138
1.22.2 操纵Web摄像机数据 143
1.22.3 结论 147
1.22.4 参考文献 147

-------------------第三册----------------------
第1章 通用编程技术

简介  2

Kim Pallister

1.1 调度游戏中的事件 4

Michael Harvey,Carl S. Marshall

1.1.1 调度器的组成 5

1.1.2 一个简单的调度器 8

1.1.3 高级概念 10

1.1.4 结论 11

1.1.5 参考文献 12

1.2 一个基于对象组合的游戏架构 13

Scott Patterson

1.2.1 游戏开发的各个阶段 13

1.2.2 游戏架构设计 14

1.2.3 游戏架构实现 17

1.2.4 源代码 20

1.2.5 参考文献 21

1.3 让C中的宏重现光辉 23

1.3.1 声明 23

1.3.2 第1个宏技巧: 把枚举值转化为字符串 23

1.3.3 第2个宏技巧: 利用二进制表达式得到编译期常量 25

1.3.4 第3个宏技巧:给标准断言添加描述性注释 26

1.3.5 第4个宏技巧:编译期断言 26

1.3.6 第5个宏技巧:得到一个数组里面的元素个数 27

1.3.7 第6个宏技巧: 在一个字符串中间加入__LINE__ 27

1.3.8 第7个宏技巧:防止进入无限循环 28

1.3.9 第8个宏技巧:小型的特制语言 29

1.3.10 第9个宏技巧:简化类接口 30

1.3.11 结论 33

1.3.12 参考文献 33

1.4 平台无关的函数绑定代码生成器 34

Allen Pouratian

1.4.1 年轻与智慧 34

1.4.2 概要 35

1.4.3 细节 36

1.4.4 脚本 38

1.4.5 网络 38

1.4.6 结论 39

1.4.7 参考文献 39

1.5 基于句柄的智能指针 40

Brian Hawkins

1.5.1 用法 40

1.5.2 句柄 41

1.5.3 智能指针 42

1.5.4 结论 43

1.5.5 参考文献 43

1.6 定制STL分配器 44

Pete Isensee

1.6.1 一个范例 44

1.6.2 分配器的基础 45

1.6.3 分配器的要求 45

1.6.4 缺省的分配器对象 49

1.6.5 编写自己的分配器 49

1.6.6 潜在的用途 51

1.6.7 分配器状态数据 51

1.6.8 一些建议 52

1.6.9 实现细节 52

1.6.10 结论 52

1.6.11 参考文献 53

1.7 立即存盘 54

Martin Brownlow

1.7.1 为何如此困难 54

1.7.2 SAVEMGR类 55

1.7.3 SAVEOBJ类 55

1.7.4 数据类型与扩展 56

1.7.5 重载缺省函数 56

1.7.6 一个简单的例子 57

1.7.7 结论 58

1.8 自动列表设计模式 59

Ben Board

1.8.1 实现 59

1.8.2 实现时的注意事项 61

1.8.3 结论 63

1.9 浮点异常处理 64

Soren Hannibal

1.9.1 为什么要崩溃 64

1.9.2 你的程序处理浮点异常么 65

1.9.3 异常的类型 65

1.9.4 代码 65

1.9.5 调试浮点错误 66

1.9.6 结论 66

1.10 使用UML开发一个配合设计的游戏引擎 67

Thomas Demachy

1.10.1 对象就在游戏之中 67

1.10.2 动态的类--正如动态的棋子 70

1.10.3 协作与迭代 72

1.10.4 实现上的问题 73

1.10.5 结论 74

1.10.6 参考文献 75

1.11 使用Lex和Yacc分析自定义数据文件 76

Paul Kelly

1.11.1 Lex 77

1.11.2 Yacc 77

1.11.3 优点与缺陷 77

1.11.4 Yacc和Lex中的交互 78

1.11.5 针对游戏子系统的自定义数据文件 79

1.11.6 把数据输出工具与Lex和Yacc结合起来 80

1.11.7 一个完整的例子 80

1.11.8 结论 84

1.11.9 如何得到Flex和Bison 84

1.11.10 参考文献 84

1.12 为世界市场开发游戏 85

Aaron Nicholls

1.12.1 市场潜力 85

1.12.2 门面事,先处理--显示和输入 86

1.12.3 字符集 88

1.12.4 界面和设计方面的考虑 90

1.12.5 本地化 93

1.12.6 设计和规划中的考虑 94

1.12.7 测试 95

1.12.8 结论 98

1.12.9 参考文献 98

1.13 3D游戏中的实时输入和用户界面 99

Greg Seegert

1.13.1 实现用户界面 99

1.13.2 指定用户界面元素 100

1.13.3 本地化问题 101

1.13.4 输入系统 102

1.13.5 鼠标与操纵杆 103

1.13.6 在处理延迟方面用户界面的作用 104

1.13.7 结论 105

1.13.8 参考文献 105

1.14 自然的选择:饼状菜单的演化 106

Don Hopkins

1.14.1 Feng GUI的饼状菜单 106

1.14.2 对饼状菜单的研究与评估 107

1.14.3 饼状菜单插件 108

1.14.4 未来发展方向 112

1.14.5 走进SimCity中的城镇 112

1.14.6 Sims中的起居室 114

1.14.7 结论 115

1.14.8 参考文献 115

1.15 轻量级的、基于规则的日志记录 117

Brian Hawkins

1.15.1 规则 117

1.15.2 调试标志 117

1.15.3 配置文件 118

1.15.4 可配置的标志值 119

1.15.5 日志记录 119

1.15.6 用法 121

1.15.7 结论 122

1.15.8 参考文献 122

1.16 日志服务 123

Eric Robert

1.16.1 管理信息 123

1.16.2 系统层次 124

1.16.3 Journal接口 127

1.16.4 创建日志服务 129

1.16.5 结论 132

1.16.6 参考文献 132

1.17 实时的层次化性能评测 133

Greg Hjeistrom,Byon Garrabrant

1.17.1 性能评测树 134

1.17.2 用法 134

1.17.3 实现 136

1.17.4 结论 139

1.17.5 参考文献 139

-------------------第四册----------------------
第1章 通用编程
简介 Chris Corry 2
1.1 调试游戏程序的学问 Steve Rabin 4
1.1.1 五步调试法 4
1.1.2 第一步:始终如一地重现问题 4
1.1.3 第二步:搜集线索 5
1.1.4 第三步:查明错误的源头 6
1.1.5 第四步:纠正问题 7
1.1.6 第五步:对所作的修改进行测试 7
1.1.7 高级调试技巧 8
1.1.8 困难的调试情景和模式 10
1.1.9 理解底层系统 12
1.1.10 增加有助于调试的基础设施 12
1.1.11 预防bug 13
1.1.12 结论 14
1.1.13 致谢 15
1.1.14 参考文献 15
1.2 一个基于HTML的日志和调试系统 James Boer 16
1.2.1 于日志系统的优势 16
1.2.2 究竟什么是事件日志? 16
1.2.3 HTML和调用堆栈 17
1.2.4 工作原理 18
1.2.5 一些有用的心得 21
1.2.6 结论 21
1.3 时钟:游戏的脉搏尽在掌握 Noel Llopis 23
1.3.1 关于时间的基础 23
1.3.2 时钟系统的组成 24
1.3.3 避免失真 25
1.3.4 结论 29
1.4 设计和维护大型跨平台库 David Etherton 30
1.4.1 设计 30
1.4.2 Build系统 32
1.4.3 细节 33
1.4.4 结论 35
1.4.5 参考文献 35
1.5 利用模版化的空闲块列表克服内存碎片问题 Paul Glinker 36
1.5.1 内存操作 36
1.5.2 解决方案 37
1.5.3 实现细节 37
1.5.4 有效地使用我们的Freelist 40
1.5.5 结论 40
1.5.6 参考文献 41
1.6 一个用C++实现的泛型树容器类 Bill Budge 42
1.6.1 可重用的库 42
1.6.2 树的概念 43
1.6.3 树的实现 43
1.6.4 利用STL 46
1.6.5 结论 49
1.6.6 参考文献 49
1.7 弱引用和空对象 Noel Llopis 51
1.7.1 使用指针 51
1.7.2 弱引用 52
1.7.3 空对象 55
1.7.4 结论 56
1.7.5 参考文献 57
1.8 游戏中的实体管理系统 Matthew Harmon 58
1.8.1 概述 58
1.8.2 实体消息 60
1.8.3 实体代码 61
1.8.4 类的代码 63
1.8.5 实体管理器 63
1.8.6 基于消息的游戏循环 65
1.8.7 开始:消息类 65
1.8.8 从小处着手:基本实体消息 66
1.8.9 游戏和环境消息 67
1.8.10 系统成长:一些高级消息 67
1.8.11 处理碰撞 69
1.8.12 扩展到多玩家 69
1.8.13 开发和调试消息 70
1.8.14 好处 70
1.8.15 光盘中的内容 71
1.8.16 总结 71
1.9 Windows和Xbox平台上地址空间受控的动态数组 Matt Pritchard 72
1.9.1 传统的动态数组管理 72
1.9.2 深入观察 73
1.9.3 地址空间管理 != 存储管理 73
1.9.4 重新思考关于数组增大的问题 74
1.9.5 新的增长规则 74
1.9.6 使用地址空间受控的数组 75
1.9.7 结论 79
1.10 用临界阻尼实现慢入慢出的平滑 Thomas Lowe 80
1.10.1 可用的技术 80
1.10.2 阻尼弦与临界阻尼 82
1.10.3 实践 82
1.10.4 设置平滑速率的上限 84
1.10.5 结论 85
1.10.6 参考文献 85
1.11 一个易用的对象管理器 Natalya Tatarchuk 86
1.11.1 对象管理的传统做法 86
1.11.2 灵活的对象管理器 87
1.11.3 结论 91
1.11.4 参考文献 92
1.12 使用自定义的RTTI属性对对象进行流操作及编辑 Frederic My 93
1.12.1 扩展的RTTI 93
1.12.2 属性 95
1.12.3 编辑属性 97
1.12.4 保存 99
1.12.5 载入 100
1.12.6 与旧版本文件的兼容性问题:类的描述 101
1.12.7 与旧版本文件的兼容性问题:匹配 102
1.12.8 “函数”属性 103
1.12.9 技巧和提示 103
1.12.10 思考 104
1.12.11 结论 104
1.12.12 参考文献 104
1.13 使用XML而不牺牲速度 Mark T. Price 106
1.13.1 为什么要使用XML呢? 106
1.13.2 简单介绍XDS Meta格式 107
1.13.3 XDS工具集 108
1.13.4 使用XDS工具集 109
1.13.5 整合 115
1.13.6 总结 115
1.13.7 参考文献 115

-------------------第五册----------------------
第1章 通用编程
引言 2
William E.Damon Ⅲ
1.1 面向编辑器的上下文相关HUD 3
Grex游戏公司,Adm Martin
1.1.1 问题 3
1.1.2 解决方案 6
1.1.3 实现 7
1.1.4 用户控制 10
1.1.5 总结 11
1.1.6 参考文献 11
1.2 在游戏中解析文本数据 12
Aurelio Reis
1.2.1 开始之前 12
1.2.2 token到底是什么 12
1.2.3 编写词法分析器 13
1.2.4 工作原理 14
1.2.5 制定自己的格式 15
1.2.6 解析token列表 17
1.2.7 总结 18
1.2.8 参考文献 18
1.3 基于组件的对象管理 19
Circle Studio公司,Bjarne Rene
1.3.1 除旧迎新 19
1.3.2 组件 20
1.3.3 系统的创建 23
1.3.4 总结 29
1.4 用模板实现一个可在C++中使用的反射系统 30
Artificial Mind & Movement公司,Dominic Fillion
1.4.1 需求 31
1.4.2 第1部分:运行时类型信息 31
1.4.3 在RTTI的实现中使用模板 33
1.4.4 关于RTTI的其他修改建议 35
1.4.5 第2部分:属性对象 36
1.4.6 属性的存储 38
1.4.7 属性类型 38
1.4.8 属性注册钩子(Hook)函数 39
1.4.9 属性的注册 40
1.4.10 脚本应用 41
1.4.11 Tweaker应用 42
1.4.12 其他应用 42
1.4.13 总结 42
1.4.14 参考文献 43
1.5 可加速BSP算法的球体树 44
Artificial Mind & Movement公司,Dominic Filion
1.5.1 BSP算法 44
1.5.2 创建BSP树 45
1.5.3 优化最初步骤 46
1.5.4 总结 51
1.5.5 参考文献 51
1.6 改进后的视锥剔除算法 52
Frank Puig Placeres
1.6.1 视锥剔除 52
1.6.2 传统的六面法 53
1.6.3 雷达法 54
1.6.4 这个点在视锥内部吗? 54
1.6.5 球体在哪里? 56
1.6.6 其他应用 57
1.6.7 进一步的改造 58
1.6.8 总结 60
1.6.9 参考文献 60
1.7 通用的分页管理系统 61
Ignacio Incera Cruz
1.7.1 老式的分页解决方案:一查到底 61
1.7.2 GP分页解决方案:只检查需要的 62
1.7.3 索引是关键 62
1.7.4 GPtile:空间中的块 65
1.7.5 The world:搜索空间 67
1.7.6 窗口:在GPworld中航行 69
1.7.7 多窗口,多用户 70
1.7.8 优化:多线程分页 71
1.7.9 总结 71
1.7.10 参考文献 71
1.8 基于栈的大规模状态机 72
James Boer
1.8.1 传统状态机编码及相关问题 72
1.8.2 用C++方法解决游戏状态难题 74
1.8.3 状态接口类 75
1.8.4 状态的堆叠管理:为什么三维比二维好用 75
1.8.5 状态对象管理系统 76
1.8.6 总结 78
1.8.7 参考文献 79
1.9 使用BSP树构造CSG几何体 80
Octavian Marius Chincisan
1.9.1 CSG的布尔运算 80
1.9.2 为什么要使用BSP树 84
1.9.3 BSP树的实现 85
1.9.4 组合装配 86
1.9.5 总结 88
1.9.6 参考文献 89
1.10 在游戏中集成Lua 90
eV Interactive公司,Matthew Harmon
1.10.1 Lua的概况 90
1.10.2 Lua与C语言的接口 92
1.10.3 在游戏中嵌入Lua 94
1.10.4 实时性方面的考虑 97
1.10.5 脚本管理框架 99
1.10.6 总结 102
1.10.7 参考文献 102
1.11 用基于policy的设计改进Freelist 103
Nathan Mefford
1.11.1 Freelist概述 103
1.11.2 Policy:雷霆救兵 104
1.11.3 分解Freelist 106
1.11.4 实现Freelist:这是它吗? 107
1.11.5 选择最佳的policy 109
1.11.6 可能性 111
1.11.7 总结 113
1.11.8 参考文献 113
1.12 实时远程调试信息日志生成器 114
Microids Canada公司,Patrick Duquette
1.12.1 对标准化的调试日志的需求 114
1.12.2 数据表示:你可看到我所看到的 115
1.12.3 本文提议的解决方案 115
1.12.4 游戏日志模块 117
1.12.5 可能的改进和扩展 118
1.12.6 总结 118
1.12.7 参考文献 118
1.13 透明的类的保存和加载技巧 119
Patrick Meehan 
1.13.1 小窍门 119
1.13.2 FreezeMgr的实现 120
1.13.3 其他几个特性 124
1.13.4 如何使用范例 125
1.13.5 总结 126
1.13.6 参考文献 126
1.14 高效且忽略缓存的ABT树实现方法 128
瑞士联邦理工学院(Swiss Federal Institute of Technology,简称EPFL),虚拟现实实验室(virtual Reality Lab,简称VRLab),Sébastien Schertenleib
1.14.1 计算机内存结构 128
1.14.2 ABT树 129
1.14.3 确认阶段 134
1.14.4 总结 134
1.14.5 参考文献 134
1.15 状态机的可视化设计 136
Scott Jacobs
1.15.1 为什么需要代码生成 136
1.15.2 让“可视”成为可能 137
1.15.3 状态的管理 138
1.15.4 系统组装 138
1.15.5 总结 141
1.15.6 参考文献 141
1.16 泛型组件库 142
Warrick Buchanan
1.16.1 类型识别系统 142
1.16.2 工厂 143
1.16.3 工厂单例与子工厂 145
1.16.4 DLL工厂 145
1.16.5 组件 146
1.16.6 组件接口 147
1.16.7 接口版本管理 147
1.16.8 定义组件及其接口 149
1.16.9 组件的使用 150
1.16.10 配置组件库 151
1.16.11 总结 151
1.16.12 参考文献 151
1.17 选择自己的路线——菜单系统 152
Wendy Jones
1.17.1 为什么需要菜单系统 152
1.17.2 菜单系统的对象 153
1.17.3 总结 158
1.17.4 参考文献 159

-------------------第六册----------------------
第1章 通用编程
简介 2
Adam Lake
1.1 Lock-Free算法 4
Toby Jones
1.1.1 Compare-And-Swap及其他通用原语 4
1.1.2 Lock-Free参数化的堆栈 6
1.1.3 Lock-Free参数化的队列 9
1.1.4 Lock-Free参数化的Freelist 11
1.1.5 总结 13
1.1.6 参考文献 13
1.1.7 相关资源 14
1.2 通过OpenMP来充分利用多核处理器的能力 15
Pete Isensee
1.2.1 OpenMP应用实例:粒子系统 15
1.2.2 好处 16
1.2.3 性能 16
1.2.4 OpenMP应用实例:碰撞检测 17
1.2.5 线程组 18
1.2.6 函数的并行化 18
1.2.7 缺陷 19
1.2.8 结论 20
1.2.9 参考文献 21
1.2.10 相关资源 21
1.3 用OpenCV库实现游戏中的计算机视觉 22
Arnau Ramisa、Enric Vergara、Enric Marti
1.3.1 引子 22
1.3.2 游戏中的计算机视觉 22
1.3.3 开放的计算机视觉库 22
1.3.4 计算机视觉在游戏中一个简单的应用 23
1.3.5 未来的工作 31
1.3.6 参考文献 31
1.4 游戏对象的地理网格注册 33
Roger Smith
1.4.1 引子 33
1.4.2 四叉树和八叉树 34
1.4.3 游戏对象的组织形式 35
1.4.4 总结 39
1.4.5 参考文献 39
1.5 BSP技术 40
Octavian Marius Chincisan
1.5.1 什么是BSP?为什么要使用BSP? 40
1.5.2 基于节点的BSP 41
1.5.3 渲染一个基于节点的BSP树 43
1.5.4 基于节点的BSP树(不进行分割) 43
1.5.5 凸状叶子BSP树 44
1.5.6 凸状叶子BSP树出入口生成 47
1.5.7 凸状叶子BSP树潜在可视集 48
1.5.8 PVS压缩 51
1.5.9 地形BSP 53
1.5.10 总结 53
1.5.11 参考文献 54
1.6 最相似字串匹配算法 55
James Boer
1.6.1 基于字符串的ID查找难题 55
1.6.2 问题的定义 56
1.6.3 现有的一些解决方案 56
1.6.4 我们自己定制的字串匹配解决方案 56
1.6.5 解决方案的实际应用 62
1.6.6 总结 63
1.6.7 参考文献 63
1.7 利用CppUnit实现单元测试 64
Blake Madden
1.7.1 单元测试技术概览 64
1.7.2 CppUnit概述 65
1.7.3 运行测试夹具 67
1.7.4 利用CppUnit进行模型类测试 68
1.7.5 私有函数的单元测试 74
1.7.6 用CppUnit测试底层功能 75
1.7.7 总结 79
1.7.8 参考文献 80
1.8 为游戏的预发布版本添加数字指纹,威慑并侦测盗版行为 81
Steve Rabin
1.8.1 威慑策略 81
1.8.2 利用水印和指纹来进行侦测 82
1.8.3 添加数字指纹的流程 83
1.8.4 数字指纹添加过程的安全性 83
1.8.5 数字指纹的添加策略 83
1.8.6 破解数字指纹 85
1.8.7 总结 86
1.8.8 参考文献 86
1.9 通过基于访问顺序的二次文件排序,实现更快速的文件加载 87
David Koenig
1.9.1 问题的提出 87
1.9.2 解决方案 88
1.9.3 基于访问的二次文件排序的工作流程 89
1.9.4 优化效果 90
1.9.5 影响最终优化结果的因素 90
1.9.6 潜在的问题 91
1.9.7 其他一些通用的最佳实践方法 91
1.9.8 总结 92
1.9.9 参考文献 92
1.10 你不必退出游戏:资产热加载技术可以实现快速的反复调整 93
Charles Nicholson
1.10.1 资产热加载的工作流程 93
1.10.2 资产热加载过程的剖析 94
1.10.3 实际应用中需要考虑的事项 97
1.10.4 示范程序 98
1.10.5 总结 99
1.10.6 进阶参阅 99

你可能感兴趣的:(编程)