书籍详情

游戏编程精粹(2)

游戏编程精粹(2)

作者:(美)Mark A.Deloura编;袁国忠,陈蔚译

出版社:人民邮电出版社

出版时间:2003-01-01

ISBN:9787115108715

定价:¥75.00

购买这本书可以去
内容简介
欢迎阅读《游戏编程精粹2》。本书精选了70篇讨论各种游戏编程主题的文章,读者可将其中阐述的技术直接应用到游戏中。能给读者呈现一本这样的图书,我感到自豪。这是一本必备的参考资料,是40多位经验丰富的游戏开发人员智慧和经验的结晶。Mark Deloura是Game Developer杂志的主编,也是《游戏编程精粹1》和《游戏编程精粹2》的编辑。加入Game Developer之前,Mark在任天堂(美国)公司工作过5年,担任开发人员关系小组的主力软件工程师,从事Gamecube和Nintendo 64开发。在此之前,Mark还从事过虚拟现实方面的研究,是多个Usene虚拟现实新闻组的主持人之一。本书是“游戏编程精粹”系列丛书的第二本,包括70多篇全新的、探讨各种游戏编程主题的文章,每篇文章要么提供了某个编程问题的实用解决方案,要么提出了一种创造性的减少编程时间和冗余的方法。本书涵盖了开发最尖端的游戏引擎所涉及的主要主题,全书由6章组成,包括通用编程技术、数学技巧、人工智能、几何体管理、图形显示和音频编程。专家级开发人员可以立刻应用书
作者简介
  MarkDeloura是GameDeveloper杂志的主编,也是《游戏编程精粹1》和《游戏编程精粹2》的编辑。加入GameDeveloper之前,Mark在任天堂(美国)公司工作过5年,担任开发人员关系小组的主力软件工程师,从事Gamecube和Nintendo64开发。在此之前,Mark还从事过虚拟现实方面的研究,是多个Usene虚拟现实新闻组的主持人之一。
目录
第1章  通用编程技术                  
 绪  论 3                  
 Scott Bilas                  
 1.1  优化C++游戏 5                  
 Andrew Kirmse                  
 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  内联函数和宏 14                  
 Peter Dalton                  
 1.2.1  内联函数的优点 14                  
 1.2.2  何时使用内联函数 15                  
 1.2.3  何时使用宏 16                  
 1.2.4  微软特有的情况 16                  
 1.2.5  参考文献 17                  
 1.3  抽象接口编程 18                  
 Noel Liopis                  
 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++类 25                  
 Herb Marselas                  
 1.4.1  导出函数 25                  
 1.4.2  导出类 25                  
 1.4.3  导出类成员函数 27                  
 1.4.4  导出虚拟类成员函数 27                  
 1.4.5  总结 28                  
 1.5  避免DLL困境 29                  
 Herb Marselas                  
 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  动态类型信息 34                  
 Scott Wakeling                  
 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++成员访问的属性类 41                  
 Charles Cafrelli                  
 1.7.1  代码 41                  
 1.7.2  其他用途 44                  
 1.7.3  推荐读物 44                  
 1.8  一个游戏实体工厂 45                  
 Fran?ois Dominic Laramée                  
 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++添加摒弃功能 55                  
 Noel Llopis                  
 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  一个插入式调试内存管理器 59                  
 Peter Dalton                  
 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  一个内置的游戏剖析模块 66                  
 Jeff Evertt                  
 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游戏的线性编程模型 71                  
 Javier F. Otaegui                  
 1.12.1  更新背景 71                  
 1.12.2  解决方案:多线程(Multithreading) 72                  
 1.12.3  参考文献 75                  
 1.13  栈缠绕 76                  
 Bryon Hapgood                  
 1.13.1  简单的TempRet 76                  
 1.13.2  TempRet链 77                  
 1.13.3  Thunking 78                  
 1.13.4  递归 80                  
 1.14  自我修改的代码 82                  
 Bryon Hapgood                  
 1.14.1  RAM代码的原理 82                  
 1.14.2  一个快速的Bit Blitter 83                  
 1.15  使用资源文件来管理文件 91                  
 Bruno Sousa                  
 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  游戏输入的记录和重放 96                  
 Bruce Dawson                  
 1.16.1  记录输入有何用途 96                  
 1.16.2  原理 97                  
 1.16.3  测试输入记录功能 100                  
 1.16.4  结论 100                  
 1.16.5  参考文献 101                  
 1.17  一个灵活的文本分析系统 102                  
 James Boer                  
 1.17.1  分析系统 102                  
 1.17.2  宏. 头文件和预处理技术 103                  
 1.17.3  该分析系统的结构 104                  
 1.17.4  小结 106                  
 1.18  一个通用的调节器 107                  
 Lasse Staff Jensen                  
 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  生成真正的随机数 115                  
 Pete Isensee                  
 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过滤器来提高计算性能 120                  
 Mark Fischer                  
 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导出器和动画工具包 127                  
 Marco Tombesi                  
 1.21.1  导出 128                  
 1.21.2  参考文献 137                  
 1.22  在视频游戏中使用Web摄像机 138                  
 Nathan d'Obrenan                  
 1.22.1  初始化Web摄像机捕获窗口 138                  
 1.22.2  操纵Web摄像机数据 143                  
 1.22.3  结论 147                  
 1.22.4  参考文献 147                  
 第2章  数学技巧                  
 绪  论 151                  
 Eddie Edwards                  
 2.1  浮点计算技巧:使用IEEE浮点格式以提高性能 152                  
 Yossarian King                  
 2.1.1  概述 152                  
 2.1.2  IEEE浮点格式 152                  
 2.1.3  浮点数技巧 153                  
 2.1.4  用于正弦和余弦函数的线性查找表 158                  
 2.1.5  平方根函数的对数优化 160                  
 2.1.6  优化任何函数 161                  
 2.1.7  性能测量 163                  
 2.1.8  结论 163                  
 2.1.9  参考文献 164                  
                   
 2.2  矢量和平面技巧 165                  
 John Olsen                  
 2.2.1  相对于碰撞面的高度 165                  
 2.2.2  找出碰撞点 166                  
 2.2.3  到碰撞点的距离 167                  
 2.2.4  反射式碰撞 168                  
 2.2.5  阻尼碰撞 170                  
 2.3  一种快速. 健壮的计算3D线段交点的方法 172                  
 Graham Rhodes                  
 2.3.1  这种算法健壮的原因 172                  
 2.3.2  问题描述 172                  
 2.3.3  推导闭式解决方案方程 174                  
 2.3.4  线段 179                  
 2.3.5  实现描述 181                  
 2.3.6  可优化的地方 181                  
 2.3.7  结论 182                  
 2.3.8  参考文献 182                  
 2.4  反向弹道计算 183                  
 Aaron Nicholls                  
 2.4.1  一种特殊情况 184                  
 2.4.2  优化实现 189                  
 2.4.3  总结 190                  
 2.5  平行移动镜头 191                  
 Carl Dougan                  
 2.5.1  技术 191                  
 2.5.2  结论 194                  
 2.5.3  参考文献 194                  
 2.6  平滑的基于四元数的C2飞行路径 195                  
 Alex Vlachos                  
 2.6.1  导论 195                  
 2.6.2  位置插值 195                  
 2.6.3  朝向插值 196                  
 2.6.4  旋转方向和选择性求负 197                  
 2.6.5  四元数样条线插值 198                  
 2.6.6  有理映射中的奇异点 199                  
 2.6.7  镜头剪接 199                  
 2.6.8  代码 199                  
 2.6.9  参考文献 200                  
 2.7  递归逐维分组:一种快速的碰撞检测算法 201                  
 Steve Rabin                  
 2.7.1  其他应用 202                  
 2.7.2  该算法的缺陷 205                  
 2.7.3  查找碰撞物体对 206                  
 2.7.4  时间复杂度 208                  
 2.7.5  结论 209                  
 2.7.6  参考文献 209                  
 2.8  不规则碎片编程 210                  
 Jesse Laeuchli                  
 2.8.1  无规则碎片 210                  
 2.8.2  断层无规则碎片 211                  
 2.8.3  FBM 211                  
 2.8.4  实现 212                  
 2.8.5  使用FBM 215                  
 2.8.6  参考文献 216                  
 第3章  人工智能                  
 绪  论 219                  
 Steve Rabin                  
 3.1  AI优化策略 221                  
 Steve Rabin                  
 3.1.1  策略1:使用事件驱动行为而非轮询 221                  
 3.1.2  策略2:减少重复计算 222                  
 3.1.3  策略3:由管理员集中进行协调 222                  
 3.1.4  策略4:不那么频繁地运行AI 222                  
 3.1.5  策略5:将处理工作分散到多帧中完成 223                  
 3.1.6  策略6:利用细节级AI 223                  
 3.1.7  策略7:只解决问题的一部分 223                  
 3.1.8  策略8:离线完成困难的工作 224                  
 3.1.9  策略9:使用突发行为以避免编写脚本 224                  
 3.1.10  策略10:通过连续记录来分摊查询成本 224                  
 3.1.11  策略11:重新考虑问题 225                  
 3.1.12  结论 225                  
 3.1.13  参考文献 226                  
 3.2  用于游戏对象AI的微线程 227                  
 Bruce Dawson                  
 3.2.1  一个更简单的方法 228                  
 3.2.2  微线程 229                  
 3.2.3  栈管理 230                  
 3.2.4  并发症 231                  
 3.2.5  结论 232                  
 3.2.6  参考文献 232                  
 3.3  使用微线程管理AI 233                  
 Simon Carter                  
 3.3.1  拼凑 233                  
 3.3.2  良好的行为 233                  
 3.3.3  了然于胸 234                  
 3.3.4  并发症 236                  
 3.3.5  结论 238                  
 3.3.6  参考文献 239                  
 3.4  一种RTS命令排队体系结构 240                  
 Steve Rabin                  
 3.4.1  RTS命令 240                  
 3.4.2  命令排队 240                  
 3.4.3  循环命令 242                  
 3.4.4  结论 244                  
 3.4.5  参考文献 244                  
 3.5  一种基于分片的高性能视域和搜索系统 245                  
 Matt Pritchard                  
 3.5.1  概述 245                  
 3.5.2  定义 245                  
 3.5.3  组件1:各个玩家的可见性地图 246                  
 3.5.4  组件2:LOS模板 246                  
 3.5.5  组件3:合并的可视性地图 248                  
 3.5.6  改进搜索 249                  
 3.5.7  结论 251                  
 3.6  创建影响力地图 252                  
 Paul Tozour                  
 3.6.1  影响力地图 252                  
 3.6.2  一个简单的影响力地图 253                  
 3.6.3  影响力地图中的单元格数据 254                  
 3.6.4  计算合意值 255                  
 3.6.5  确定最佳的单元格大小 256                  
 3.6.6  影响力传播 256                  
 3.6.7  考虑地形 257                  
 3.6.8  特别考虑 258                  
 3.6.9  刷新影响力地图 259                  
 3.6.10  3D环境中的影响力地图 259                  
 3.6.11  参考文献和推荐读物 260                  
 3.7  策略评估技术 261                  
 Paul Tozour                  
 3.7.1  资源分配树 261                  
 3.7.2  计算希望的资源分配 262                  
 3.7.3  判断当前的分配情况 263                  
 3.7.4  策略决策 263                  
 3.7.5  值的估量 264                  
 3.7.6  依存图 264                  
 3.7.7  依存图节点 265                  
 3.7.8  经济规划 265                  
 3.7.9  查找脆弱的依存 266                  
 3.7.10  策略推理 266                  
 3.7.11  玩家个性 267                  
 3.7.12  总结 267                  
 3.7.13  参考文献 267                  
 3.8  3D游戏中的地形推理 269                  
 William van der Sterren                  
 3.8.1  以方便推理的方式表示地形 269                  
 3.8.2  中继点(waypoint) 270                  
 3.8.3  范例地形和AI需求 270                  
 3.8.4  战术分析(tactical analysis) 270                  
 3.8.5  从战术价值到中继点属性 271                  
 3.8.6  计算中继点属性 272                  
 3.8.7  从经验中学习 274                  
 3.8.8  将地形推理加入到游戏中 275                  
 3.8.9  其他应用 275                  
 3.8.10  结论 276                  
 3.8.11  参考文献和推荐读物 276                  
 3.9  用于可视点寻径的扩展几何体 277                  
 Thomas Young                  
 3.9.1  定义碰撞模型 277                  
 3.9.2  多边形寻径 278                  
 3.9.3  扩展并解决问题 278                  
 3.9.4  凸多边形的闵可夫斯基和 279                  
 3.9.5  扩展非凸几何体 280                  
 3.9.6  选择碰撞形状 281                  
 3.9.7  结论 281                  
 3.9.8  参考文献 281                  
 3.10  优化可视点寻径 283                  
 Thomas Young                  
 3.10.1  可视点寻径(points-of-visibility pathfinding) 283                  
 3.10.2  存储到每个点的最短路径 283                  
 3.10.3  将凸角相连 284                  
 3.10.4  轮廓区 285                  
 3.10.5  将轮廓区用于空间分区系统 287                  
 3.10.6  结论 287                  
 3.10.7  参考文献 287                  
 3.11  有齿物群的模拟:捕食者和猎物 288                  
 Steven Woodcock                  
 3.11.1  全新的世界 289                  
 3.11.2  有齿物群的模拟 291                  
 3.11.3  局限性和可改进的地方 291                  
 3.11.4  参考文献 292                  
 3.12  一个用C++编写的通用模糊状态机 293                  
 Eric Dybsand                  
 3.12.1  为何在游戏中使用FuSM 294                  
 3.12.2  如何在游戏中使用FuSM 294                  
 3.12.3  复习《游戏编程精粹1》中的C++通用有限状态机 295                  
 3.12.4  将通用FSM修改为FuSM 295                  
 3.12.5  在游戏中使用模糊逻辑 296                  
 3.12.6  参考文献 296                  
 3.13  避免模糊系统中的组合激增 297                  
 Michael Zarozinski                  
 3.13.1  问题 297                  
 3.13.2  解决方案 298                  
 3.13.3  范例 299                  
 3.13.4  结论 303                  
 3.13.5  参考文献 303                  
 3.14  一个在游戏中使用神经元网络的例子 304                  
 John Manslow                  
 3.14.1  游戏 304                  
 3.14.2  多玩家感知器 304                  
 3.14.3  选择输入 306                  
 3.14.4  收集数据 306                  
 3.14.5  训练MLP 307                  
 3.14.6  结果 308                  
 3.14.7  结论 308                  
 3.14.8  参考文献 309                  
 第4章  几何体管理                  
 绪  论 313                  
 Eric Lengyel                  
 4.1  各种VIPM方法的比较 314                  
 Tom Forsyth                  
 4.1.1  考虑因素 314                  
 4.1.2  Vanilla VIPM 316                  
 4.1.3  跳带 319                  
 4.1.4  多层跳带 319                  
 4.1.5  混合模式VIPM 320                  
 4.1.6  混合模式跳带 321                  
 4.1.7  滑窗 321                  
 4.1.8  小结 324                  
 4.1.9  参考文献 325                  
 4.2  使用联锁分片简化地形 326                  
 Greg Snook                  
 4.2.1  分片的重访问 327                  
 4.2.2  生成地图 328                  
 4.2.3  分片模板 328                  
 4.2.4  消除难看的接缝 329                  
 4.2.5  更好. 更快. 更强 330                  
 4.2.6  结论 331                  
 4.2.7  参考文献 331                  
 4.3  快速可视剔除. 射线跟踪以及范围搜索的球形树 332                  
 John W. Ratcliff                  
 4.3.1  包围球 332                  
 4.3.2  使用球形树 332                  
 4.3.3  演示应用程序 333                  
 4.4  压缩的轴向包围盒树 335                  
 Miguel Gomez                  
 4.4.1  概览层次排序方法 335                  
 4.4.2  AABB树 336                  
 4.4.3  构建AABB树 336                  
 4.4.4  压缩AABB树 337                  
 4.4.5  近似范围 337                  
 4.4.6  利用冗余 338                  
 4.4.7  运行时效 339                  
 4.4.8  将来的工作 339                  
 4.4.9  参考文献 339                  
 4.5  直接访问四叉树查找 340                  
 Matt Pritchard                  
 4.5.1  性能剖析 340                  
 4.5.2  消除中间阻碍 341                  
 4.5.3  条件和要求 341                  
 4.5.4  判断树层 341                  
 4.5.5  位置映射 343                  
 4.5.6  判断位置 344                  
 4.5.7  遍历四叉树 344                  
 4.5.8  优化四叉树 344                  
 4.6  近似鱼缸折射 347                  
 Alex Vlachos                  
 4.6.1  鱼缸观察现象 347                  
 4.6.2  提高其真实性 349                  
 4.6.3  结论 349                  
 4.7  渲染打印分辨率的屏幕快照 350                  
 Alex Vlachos                  
 4.7.1  基本算法 350                  
 4.7.2  忠告及注意 353                  
 4.7.3  结论 353                  
 4.7.4  参考文献 353                  
 4.8  对任意表面应用贴花 354                  
 Eric Lengyel                  
 4.8.1  算法 354                  
 4.8.2  三角形剪裁 356                  
 4.8.3  实现代码 357                  
 4.8.4  参考文献 357                  
 4.9  用天空包围盒渲染远景 358                  
 Jason Shankel                  
 4.9.1  基本技术 358                  
 4.9.2  天空包围盒分辨率 359                  
 4.9.3  天空包围盒大小 359                  
 4.9.4  渲染场景 360                  
 4.9.5  立方体环境映射 360                  
 4.9.6  生成天空包围盒纹理 361                  
 4.9.7  结论 361                  
 4.9.8  源代码 361                  
 4.10  自阴影角色 362                  
 Alex Vlachos, David Gosselin, Jason L. Mitchell                  
 4.10.1  研究回顾 362                  
 4.10.2  角色几何分割 362                  
 4.10.3  渲染纹理 362                  
 4.10.4  渲染角色 363                  
 4.10.5  结论 364                  
 4.10.6  参考文献 364                  
 4.11  经典的Super Mario 64游戏第三人称控制和动画 365                  
 Steve Rabin                  
 4.11.1  设置 365                  
 4.11.2  转换控制器的输入 365                  
 4.11.3  旋转角色 367                  
 4.11.4  角色移动 368                  
 4.11.5  角色动画 368                  
 4.11.6  Super Mario 64动画分析 370                  
 4.11.7  结论 371                  
 4.11.8  参考文献 371                  
 第5章  图形显示                  
 绪  论 375                  
 D. Sim Dietrich Jr                  
 5.1  卡通渲染:实时轮廓边缘检测与渲染 376                  
 Carl S. Marshall                  
 5.1.1  着墨器(Inker) 376                  
 5.1.2  重要的边 377                  
 5.1.3  轮廓边缘检测技术 377                  
 5.1.4  基于边的着墨 377                  
 5.1.5  可编程顶点着色器着墨 379                  
 5.1.6  高级纹理特征着墨 381                  
 5.1.7  结论 381                  
 5.1.8  参考文献 382                  
 5.2  使用纹理映射的卡通渲染与可编程顶点着色器 383                  
 Adam Lake                  
 5.2.1  卡通着色技术 383                  
 5.2.2  上色 383                  
 5.2.3  可编程顶点着色器 386                  
 5.2.4  结论 388                  
 5.2.5  参考文献 388                  
 5.3  动态逐像素光照技术 389                  
 Dan Ginsburg, Dave Gosselin                  
 5.3.1  动态光照贴图的3D纹理 389                  
 5.3.2  Dot3凹凸贴图(Bump Mapping) 391                  
 5.3.3  使用立方贴图规一化 395                  
 5.3.4  逐像素聚光灯(Per-Pixel Spotlight) 396                  
 5.3.5  参考文献 396                  
 5.4  使用3D硬件生成过程云彩 398                  
 Kim Pallister                  
 5.4.1  云彩性质 398                  
 5.4.2  生成随机数 399                  
 5.4.3  噪音多个倍频的动画 401                  
 5.4.4  贴图到天空几何体 403                  
 5.4.5  功能延伸 404                  
 5.4.6  硬件限制 404                  
 5.4.7  可伸缩性 405                  
 5.4.8  结论 405                  
 5.4.9  参考文献 406                  
 5.5  针对较快镜头眩光的纹理屏蔽 407                  
 Chris Maughan                  
 5.5.1  镜头眩光遮挡 407                  
 5.5.2  硬件问题 407                  
 5.5.3  纹理屏蔽 409                  
 5.5.4  性能考虑 410                  
 5.5.5  改进 411                  
 5.5.6  示例代码 411                  
 5.5.7  替代途径 412                  
 5.5.8  参考文献 412                  
 5.6  实用优先缓冲阴影 413                  
 D. Sim Dietrich Jr.                  
 5.6.1  比较优先缓冲与深度缓冲 415                  
 5.6.2  解决锯齿化问题 416                  
 5.6.3  混合途径 417                  
 5.6.4  小结 418                  
 5.6.5  参考文献 418                  
 5.7  替用体技术:添加点缀 419                  
 Tom Forsyth                  
 5.7.1  整个过程 419                  
 5.7.2  渲染替换体 420                  
 5.7.3  更新试探法 423                  
 5.7.4  效率 424                  
 5.7.5  预测 424                  
 5.7.6  小结 425                  
 5.8  硬件加速过程纹理动画中的运算 426                  
 Greg James                  
 5.8.1  硬件运算 426                  
 5.8.2  将来的工作 435                  
 5.8.3  致谢 435                  
 5.8.4  示例源码 435                  
 5.8.5  参考文献 435                  
 第6章  音频编程                  
 绪  论 439                  
 James Boer                  
 6.1  游戏音频设计模式 440                  
 Scott Patterson                  
 6.1.1  桥接(Bridge) 440                  
 6.1.2  外观(Fa?ade) 441                  
 6.1.3  合成(Composite) 441                  
 6.1.4  代理(Proxy) 442                  
 6.1.5  修饰器(Decorator) 442                  
 6.1.6  命令(Command) 443                  
 6.1.7  备忘录(Memento) 443                  
 6.1.8  观测器(Observer) 443                  
 6.1.9  大泥球(Big Ball of Mud)(也称做“意大利面条式”代码) 444                  
 6.1.10  结论 445                  
 6.1.11  参考文献 445                  
 6.2  在采样合成器中声音的同步重用技术 446                  
 Thomas Engel                  
 6.2.1  存在的问题 446                  
 6.2.2  解决方案的思路 447                  
 6.2.3  解决方案 447                  
 6.2.4  结论 448                  
 6.3  软件DSP效果 450                  
 Ian Lewis                  
 6.3.1  滤波 450                  
 6.3.2  卷积(convolution) 451                  
 6.3.3  延迟 451                  
 6.3.4  插值(interpolation) 452                  
 6.3.5  参考文献 453                  
 6.4  数字音频的交互式处理管线 454                  
 Keith Weiner                  
 6.4.1  简介 454                  
 6.4.2  讨论 456                  
 6.4.3  代码 458                  
 6.4.4  额外注释 461                  
 6.4.5  结论 462                  
 6.5  游戏中的基本音乐音序器 463                  
 Scott Patterson                  
 6.5.1  音乐流与音序 463                  
 6.5.2  核心计算机音乐概念 464                  
 6.5.3  计算机音序器实现 466                  
 6.5.4  音频合成(composite)控制 472                  
 6.5.5  源码 473                  
 6.5.6  结论 473                  
 6.5.7  参考文献 473                  
 6.6  用于游戏的交互式音序器 474                  
 Scott Patterson                  
 6.6.1  音乐联想 474                  
 6.6.2  音乐意义 474                  
 6.6.3  过渡 476                  
 6.6.4  过渡类型 476                  
 6.6.5  控制粒度 477                  
 6.6.6  目标控制 477                  
 6.6.7  设计示例 479                  
 6.6.8  源码 480                  
 6.6.9  结论 480                  
 6.6.10  参考文献 480                  
 6.7  底层声音API 481                  
 Ian Lewis                  
 核心类 481                  
 索引  483                  

猜您喜欢

读书导航