《游戏编程精粹》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:(美)MichaelDickheiser编
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2007
  • ISBN:7115167265
  • 页数:572 页
图书介绍:游戏开发精粹系列书目前在国内已出版前5卷,对国内游戏研发产生了深刻的影响。《游戏编程精粹系列6》是游戏编程精粹系列图书最新版本,内容增添了游戏测试、手机游戏和脚本管理部分,具有时效性较强。除了各种专业文章外,丛书中随书附带光盘中包含了全书所有的源程序、演示程序及需要的各种游戏开发的第三方工具。

第1章 通用编程 2

引言&William E.Damon Ⅲ  2

1.1 面向编辑器的上下文相关HUD&Grex游戏公司,Adm Martin  3

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 在游戏中解析文本数据&Aurelio Reis  12

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 基于组件的对象管理&Circle Studio公司,Bjarne Rene  19

1.3.1 除旧迎新 19

1.3.2 组件 20

1.3.3 系统的创建 23

1.3.4 总结 29

1.4 用模板实现一个可在C++中使用的反射系统&Artificial Mind&Movement公司,Dominic Fillion  30

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算法的球体树&Artificial Mind&Movement公司,Dominic Filion  44

1.5.1 BSP算法 44

1.5.2 创建BSP树 45

1.5.3 优化最初步骤 46

1.5.4 总结 51

1.5.5 参考文献 51

1.6 改进后的视锥剔除算法&Frank Puig Placeres  52

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 通用的分页管理系统&Ignacio Incera Cruz  61

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 基于栈的大规模状态机&James Boer  72

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几何体&Octavian Marius Chincisan  80

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&eV Interactive公司,Matthew Harmon 90

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&Nathan Mefford  103

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 实时远程调试信息日志生成器&Microids Canada公司,Patrick Duquette  114

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 透明的类的保存和加载技巧&Patrick Meehan  119

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树实现方法&瑞士联邦理工学院(Swiss Federal Institute of Technology,简称EPFL),虚拟现实实验室(virtual Reality Lab,简称VRLab),Sébastien Schertenleib  128

1.14.1 计算机内存结构 128

1.14.2 ABT树 129

1.14.3 确认阶段 134

1.14.4 总结 134

1.14.5 参考文献 134

1.15 状态机的可视化设计&Scott Jacobs  136

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 泛型组件库&Warrick Buchanan  142

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 选择自己的路线——菜单系统&Wendy Jones  152

1.17.1 为什么需要菜单系统 152

1.17.2 菜单系统的对象 153

1.17.3 总结 158

1.17.4 参考文献 159

第2章 数学 162

引言&Naughty Dog公司,Eric Lengyel  162

2.1 在计算机图形学中使用几何代数&Chris Lomont  163

2.1.1 引言 163

2.1.2 几何代数 164

2.1.3 线性代数 169

2.1.4 词典 171

2.1.5 实例 172

2.1.6 总结以及将来的方向 176

2.1.7 参考文献 177

2.2 最小加速度Hermite曲线&Tony Barrera,Barrera Kristiansen AB;G?vle大学创意媒体实验室Anders Hast;乌普萨拉大学图像分析中心,Ewert Bengtsson  178

2.2.1 连接具有C1连续的最小弯曲曲线 180

2.2.2 封闭的最小弯曲的曲线 181

2.2.3 总结 182

2.2.4 参考文献 182

2.3 动画中基于样条的时间控制&Red Storm Entertainment公司,James M.Van Verth  183

2.3.1 开始 183

2.3.2 一般的距离-时间函数 184

2.3.3 根据样条构造距离-时间函数 185

2.3.4 接口选择 191

2.3.5 总结 191

2.3.6 参考文献 191

2.4 快速四元数近似插值&Andy Thomason  193

2.4.1 使用四元数来表示旋转 193

2.4.2 四元数旋转插值 195

2.4.3 近似算法 196

2.4.4 算法之间的比较 206

2.4.5 Squad相关的计算 207

2.4.6 延伸阅读 208

2.4.7 总结 208

2.4.8 参考文献 208

2.5 极小极大数值近似&Christopher Tremblay  209

2.5.1 众所周知的优化 209

2.5.2 什么是理想的近似 210

2.5.3 极小极大近似的介绍 211

2.5.4误差分析 214

2.5.5 进一步改进近似 215

2.5.6 参考文献 216

2.6 应用于镜面和入口的斜视锥&Eric Lengyel  217

2.6.1 平面的表示 217

2.6.2 投影矩阵 218

2.6.3 裁剪面的修改 219

2.6.4 OpenGL实现 221

2.6.5 Direet3D实现 224

2.6.6 致谢 225

2.6.7 参考文献 225

第3章 人工智能 228

引言&美国西北大学,Robin Hunicke  228

3.1 利用导航网格实现自动掩体寻找&Radical Entertainment公司,Borut Pfeifer  230

3.1.1 导航网格 230

3.1.2 开放目标寻路 231

3.1.3 搜索掩体位置 232

3.1.4 在掩体间行进 233

3.1.5 团队掩护行为 234

3.1.6 其他功能 235

3.1.7 总结 235

3.1.8 参考文献 236

3.2 使用人工势场实现快速目标评级&Factor 5公司,Markus Breyer  237

3.2.1 基本思想 237

3.2.2 公式 238

3.2.3 势值函数的评估 240

3.2.4 可视化 240

3.2.5 方向场的应用 241

3.2.6 多维扩展 242

3.2.7 总结 243

3.3 利用Lanchester损耗模型来预测战斗结果&Page 44 Studios有限责任公司,John Bolton  244

3.3.1 概述 244

3.3.2 场景1:全体混战 245

3.3.3 场景2:狭窄的石阶 247

3.3.4 场景3:炮战 248

3.3.5 场景4:关底Boss 250

3.3.6 关于战斗力的再讨论 251

3.3.7 局限性 252

3.3.8 总结 252

3.3.9 参考文献 252

3.4 为游戏AI实现一个实用的智能规划系统&Relic Entertainment公司,Jamie Cheng;加拿大阿尔伯塔大学计算机科学系,Finnegan Southey  254

3.4.1 规划系统的框架 255

3.4.2 规划域 255

3.4.3 一个多主体规划器的例子 258

3.4.4 规划的搜索 262

3.4.5 几个应用问题 263

3.4.6 优化 265

3.4.7 总结 266

3.4.8 参考文献 266

3.5 针对多线程架构的决策树查询算法优化&Intel公司,Chuck DeSylva  268

3.5.1 概述 268

3.5.2 注意事项 269

3.5.3 优化 270

3.5.4 总结 273

3.5.5 参考文献 273

3.6 利用并行虚拟机实现AI系统的并行开发&2015公司,Michael Ramsey  275

3.6.1 功能强大,但不白给 275

3.6.2 核心术语及概念 276

3.6.3 任务的创建 277

3.6.4 任务管理 279

3.6.5 PVM的实现 282

3.6.6 实际应用:即时战略游戏 283

3.6.7 强化游戏性 284

3.6.8 总结 285

3.6.9 参考文献 286

3.7 超越A*算法&Xtrem Strategy游戏公司,Mario Grimani;Monolith Productions公司,Matthew Titelbaum  287

3.7.1 问题的定义 287

3.7.2 算法 288

3.7.3 算法的改进 290

3.7.4 实现的细节 292

3.7.5 应用实例 292

3.7.6 性能方面的考虑 297

3.7.7 几个前沿问题 298

3.7.8 总结 299

3.7.9 参考文献 299

3.8 实现最小重新规划开销的先进寻路算法:动态A*(D*)算法&Marco Tombesi  301

3.8.1 D*算法 302

3.8.2 D*算法的实现细节 302

3.8.3 实例 303

3.8.4 在游戏中又如何呢? 305

3.8.5 总结 305

3.8.6 参考文献 305

第4章 物理学 308

引言&Red Storm娱乐公司,Mike Dickheiser  308

4.1 游戏物理中空气动力学的近似计算&美国应用研究联营公司(Applied Research Associates Inc.),Graham Rhodes  310

4.1.1 背景知识 310

4.1.2 钝体上的作用力 313

4.1.3 流线体上的作用力 315

4.1.4 应用实例 318

4.1.5 总结 319

4.1.6 参考文献 320

4.2 动态青草的模拟和其他自然环境特效&沃特卢大学,Rishi Ramraj  321

4.2.1 水面特效 321

4.2.2 青草的模拟 323

4.2.3 变化传播模型 324

4.2.4 树叶的模拟:模型的应用 325

4.2.5 总结 327

4.2.6 参考文献 327

4.3 使用质点-弹簧模型获得真实的布料动画&塞维利亚大学,Juan M.Cordero  328

4.3.1 布料的离散表示 328

4.3.2 作用力 330

4.3.3 动态系统方法 333

4.3.4 仿真模拟 334

4.3.5 结论 334

4.3.6 参考文献 335

4.4 适合游戏开发的实用柔体动画技术:受压柔体模型&波兰弗罗茨瓦夫大学,Maciej Matyka  336

4.4.1 简化的质点-弹簧模型 337

4.4.2 PSB模型背后的物理学 338

4.4.3 PSB模型的实现 339

4.4.4 典型的质点-弹簧模型 340

4.4.5 PSB步骤 341

4.4.6 体积计算 341

4.4.7 采用预估修正法的Heun积分 342

4.4.8 时间步长的计算速度 342

4.4.9 几个仿真实例 343

4.4.10 进一步的发展 344

4.4.11 总结 344

4.4.12 源代码说明 345

4.4.13 致谢 345

4.4.14 参考文献 345

4.5 使用反馈控制系统让“布娃娃”活起来&苹果公司,Michael Mandel  347

4.5.1 现有的研究成果 347

4.5.2 仿真过程的控制 348

4.5.3 行为动作的创建 350

4.5.4 总结 351

4.5.5 致谢 351

4.5.6 参考文献 351

4.6 预定式物理系统的设计&Daniel F.Higgins  353

4.6.1 什么是预定式物理系统 353

4.6.2 预定式物理引擎 356

4.6.3 打磨上光 360

4.6.4 龙卷风:一个好的开始 363

4.6.5 总结 365

4.6.6 参考文献 366

4.7 预定式物理系统:相关技术及应用&Shawn Shoemaker  367

4.7.1 为什么要使用预定式物理系统 367

4.7.2 预定式物理系统 368

4.7.3 应用1:RTS游戏中建筑物的毁坏 369

4.7.4 应用2:跳跃 369

4.7.5 应用3:爆炸特效中的物体运动 370

4.7.6 应用4:浮力 371

4.7.7 应用5:伞兵 371

4.7.8 总结 373

4.7.9 参考文献 373

4.8 三维汽车模拟器中真实的摄像机运动&匈牙利布达佩斯技术经济大学,控制工程与信息技术系,图形图像小组,Barnabás Aszódi,Szabolcs Czuczor  374

4.8.1 我们需要什么?物理法则 374

4.8.2 我们得到的是什么?偶尔不够真实的运动 375

4.8.3 考察摄像机的控制 376

4.8.4 终极决策:实现人类的行为 377

4.8.5 编程中涉及的问题 379

4.8.6 总结 382

4.8.7 关于演示程序 382

第5章 图形图像 384

引言&ATI公司,Jason L.Mitchell  384

5.1 在现代GPU上渲染逼真的云彩&育碧公司,Jean-Fran?ois Dubé  386

5.1.1 制造噪音 386

5.1.2 云彩的密度 388

5.1.3 云彩的光照处理 389

5.1.4 优化 390

5.1.5 总结 390

5.1.6 参考文献 391

5.2 下雪吧,下雪吧,下雪吧(下雨吧)&微软公司(现就职于Google公司),Niniane Wang;微软公司,Bretton Wade  392

5.2.1 使用纹理为粒子束建模 393

5.2.2 渲染雪或雨的视差 393

5.2.3 用锥体模拟摄像机的移动 394

5.2.4 合并到一个矩阵中 394

5.2.5 增加美工控制 395

5.2.6 总结 395

5.2.7 参考文献 395

5.3 Widget:快速渲染和持久化小物体&Martin Brownlow  396

5.3.1 Widget的网格 396

5.3.2 高效地绘制widget 397

5.3.3 裁剪widget 401

5.3.4 总结 403

5.3.5 参考文献 404

5.4 逼真的树木和森林的2.5维替用物&布达佩斯理工大学,Gábor Szijártó  405

5.4.1 引言 405

5.4.2 以前的基于图像的方法 406

5.4.3 改进以前的方法 407

5.4.4 算法 408

5.4.5 实现 409

5.4.6 总结 412

5.4.7 参考文献 413

5.5 无栅格的可控火焰&佛罗里达中心大学,计算机科学学院,Neeharika Adabala;佛罗里达中心大学,计算机科学学院和电影与数字媒体学院,Charles E.Hughes  414

5.5.1 建模火焰 415

5.5.2 实时渲染 418

5.5.3 实例和讨论 419

5.5.4 总结 420

5.5.5 参考文献 420

5.6 使用公告牌粒子构建强大的爆炸效果&美国任天堂公司,Steve Rabin  422

5.6.1 最初的闪光 422

5.6.2 放射的火苗 423

5.6.3 白色的热核心 424

5.6.4 强烈的火球 424

5.6.5 散发的烟雾 425

5.6.6 碎片 426

5.6.7 效果表 426

5.6.8 额外的感觉 426

5.6.9 效率问题 427

5.6.10 总结 428

5.6.11 参考文献 428

5.7 渲染宝石的简单方法&ATI研究院公司,Thorsten Scheuermann  429

5.7.1 技术概览 429

5.7.2 法线和cubemap采样问题 430

5.7.3 传递的光能 430

5.7.4 反射 432

5.7.5 光斑 433

5.7.6 总结 436

5.7.7 参考文献 436

5.8 体积化的后期处理&A2M公司,Dominic Filion;摩托罗拉公司,Sylvain Boissé  437

5.8.1 体积化的后期处理 437

5.8.2 深度知识 438

5.8.3 使用shader作z比较 438

5.8.4 像素完美的裁剪 439

5.8.5 后期处理 440

5.8.6 最后一遍 440

5.8.7 多个体 440

5.8.8 总结 441

5.8.9 参考文献 441

5.9 过程式关卡生成&北得克萨斯大学,Timothy Roden和Ian Parberry  442

5.9.1 大致的方法 442

5.9.2 关卡设计 442

5.9.3 使用预制的几何体 443

5.9.4 图的生成 444

5.9.5 把预制件映射到图中 446

5.9.6 可见性和碰撞检测 448

5.9.7 增加关卡内容 448

5.9.8 总结 449

5.9.9 参考文献 449

5.10 重组shader&A2M公司,Dominic Filion  450

5.10.1 组合效果 450

5.10.2 处理组合爆炸 451

5.10.3 通过HLSL生成shader变体 452

5.10.4整合重组的shader 454

5.10.5 通过shader建立完整的流水线 455

5.10.6 其他问题 455

5.10.7 总结 456

5.10.8 参考文献 456

第6章 网络和多玩家 460

引言&Shekhar Dhupelia  460

6.1 保持大型多人在线游戏大型、在线和永存&Tantrum游戏公司,Shea Street  461

6.1.1 快速浏览 461

6.1.2 大型化 462

6.1.3 保持在线 464

6.1.4 保持永存 465

6.1.5 总结 466

6.1.6 参考文献 466

6.2 实现一个无缝的世界服务器&育碧公司,Patrick Duquette  467

6.2.1 一些定义 467

6.2.2 实现 468

6.2.3 远程控制器,或如何管理服务器的启动时期 468

6.2.4 代理服务器 468

6.2.5 登录服务器 469

6.2.6 节点服务器 469

6.2.7 世界管理器 472

6.2.8 由此而往何处 473

6.2.9 IOCP 473

6.2.10 参考文献 473

6.3 设计一个脏话过滤系统&Shekhar Dhupelia  475

6.3.1 语法与内容 475

6.3.2 字典 475

6.3.3 解析器 476

6.3.4 过滤 476

6.3.5 最好的过滤实践 477

6.3.6 人工干涉 478

6.3.7 总结 478

6.3.8 参考文献 478

6.4 远程过程调用系统的快速和高效实现&Hyun-jik Bae  480

6.4.1 RPC:简介 483

6.4.2 RPC:设计 484

6.4.3 RPC:实现 486

6.4.4 RPC:使用 489

6.4.5 样例程序 490

6.4.6 更多特性 490

6.4.7 总结 492

6.4.8 参考文献 492

6.5 在对等通信中克服网络地址转换&Jon Watte  493

6.5.1 读者 493

6.5.2 IP地址 494

6.5.3 套接字使用 494

6.5.4 路由器、点、协议 495

6.5.5 UDP包图 496

6.5.6 什么是NAT 496

6.5.7 NAT是如何破坏客户/服务协议的 499

6.5.8 NAT是如何破坏对等协议的 501

6.5.9 用于游戏的端到端解决方案 503

6.5.10 总结 509

6.5.11 参考文献 509

6.6 一个可靠的消息协议&Martin Brownlow  510

6.6.1 术语定义 510

6.6.2 为什么要可靠的消息 510

6.6.3 传统的可靠消息 511

6.6.4 一个简单的方法 511

6.6.5 总结 514

6.6.6 延伸阅读 515

6.7 安全的随机数系统&Shekhar Dhupelia  516

6.7.1 随机数影响在线游戏 516

6.7.2 网络模型 517

6.7.3 随机数池 517

6.7.4 随机数发生器 518

6.7.5 重载标准的rand()和srand() 520

6.7.6 下一步:记录和调试 520

6.7.7 下一步:即时重放 520

6.7.8 总结 521

6.7.9 参考文献 521

6.8 安全的设计&Adam Martin,Grex游戏公司  522

6.8.1 安全问题真的如此重要么? 522

6.8.2 目标 523

6.8.3 术语 523

6.8.4 威胁模型:测试不安全性 524

6.8.5 安全策略:让威胁无效 527

6.8.6 同时修订两个文档 527

6.8.7 该技术的其他优势 528

6.8.8 延伸阅读 528

6.8.9 总结 529

6.8.10 参考文献 529

第7章 音频 532

引言&Mark DeLoura  532

7.1 多线程音频编程技巧&James Boer  533

7.1.1 多线程编程简介 533

7.1.2 线程的术语和机制 534

7.1.3 鉴别适合多线程编程的音频任务 535

7.1.4 Intel的超线程技术是什么 536

7.1.5 线程编程技巧和操作 536

7.1.6 多线程的示例程序 537

7.1.7 实时流数据机制 541

7.1.8 流和线程 541

7.1.9 总结 543

7.1.10 参考文献 543

7.2 基于组的声音管理&eV Interactive公司,Matthew Harmon  544

7.2.1 API包装预览 544

7.2.2 能力 545

7.2.3 定义组 546

7.2.4 实现细节 548

7.2.5 总结 549

7.3 利用三维曲面作为音频发生器&Sami hamlaoui  550

7.3.1 方法 550

7.3.2 点发生器 551

7.3.3 线发生器 552

7.3.4 球体发生器 553

7.3.5 方体发生器 554

7.3.6 总结 555

7.3.7 光盘上的内容 555

7.3.8 参考文献 555

7.4 基于回馈延迟网络(FDN)的快速环境反响&Phenomic游戏开发公司,Christian Schüler  556

7.4.1 怎样将FDN作为资源来利用 556

7.4.2 什么是反响 557

7.4.3 回馈延迟网络(Feedback Delay Network) 557

7.4.4 选择正确的回馈矩阵 559

7.4.5 选择正确的延迟长度 560

7.4.6 控制回响时间 560

7.4.7 sweeping和细部延迟问题 561

7.4.8 总结和可能的改进 563

7.4.9 感谢 564

7.4.10 参考文献 564

7.5 单演讲者语音识别简介&Julien Hamaide  566

7.5.1 引言 566

7.5.2 识别系统 567

7.5.3 特征提取 568

7.5.4 即时配对匹配 570

7.5.5 训练 571

7.5.6 局限性 572

7.5.7 总结 572

7.5.8 参考文献 572