当前位置:首页 > 工业技术
游戏编程精粹  2
游戏编程精粹  2

游戏编程精粹 2PDF电子书下载

工业技术

  • 电子书积分:15 积分如何计算积分?
  • 作 者:(美)Mark A.Deloura编;袁国忠,陈蔚译
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2003
  • ISBN:7115108714
  • 页数:486 页
图书介绍:本书是“游戏编程精粹”系列丛书的第二本,包括70多篇探讨各种游戏编程主题的文章,涵盖了开发最尖端的游戏引擎所涉及的主要主题。全书共6章,包括通用编程技术、数学技巧、人工智能、几何体管理、图形显示和音频编程。
《游戏编程精粹 2》目录
标签:编程 游戏

第1章 通用编程技术 1

绪论 3

Scott Bilas 5

1.1 优化C++游戏 5

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内联函数和宏 14

PeterDalton 14

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 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++类 25

HerbMarselas 25

1.4.1导出函数 25

1.4.2导出类 25

1.4.3导出类成员函数 27

1.4.4导出虚拟类成员函数 27

1.4.5 总结 28

1.5避免DLL困境 29

HerbMarselas 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动态类型信息 34

ScottWakeling 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++成员访问的属性类 41

Charles Cafrelli 41

1.7.1代码 41

1.7.2其他用途 44

1.7.3推荐读物 44

1.8一个游戏实体工厂 45

Francois 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++添加摒弃功能 55

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一个插入式调试内存管理器 59

PeterDalton 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一个内置的游戏剖析模块 66

JeffEvertt 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游戏的线性编程模型 71

JavierE. Otaegui 71

1.12.1 更新背景 71

1.12.2解决方案:多线程(Multithreading) 72

1.12.3参考文献 75

1.13栈缠绕 76

Bryon Hapgood 76

1.13.1简单的TempRet 76

1.13.2TempRet链 77

1.13.3 Thunking 78

1.13.4递归 80

1.14 自我修改的代码 82

Bryon Hapgood 82

1.14.1 RAM代码的原理 82

1.14.2一个快速的Bit Blitter 83

1.15使用资源文件来管理文件 91

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游戏输入的记录和重放 96

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一个灵活的文本分析系统 102

JamesBoer 102

1.17.1 分析系统 102

1.17.2宏、头文件和预处理技术 103

1.17.3该分析系统的结构 104

1.17.4 小结 106

1.18一个通用的调节 器 107

Lasse StaffJensen 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生成真正的随机数 115

PeteIsensee 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过滤器来提高计算性能 120

MarkFischer 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导出器和动画工具包 127

Marco Tombesi 128

1.21.1 导出 128

1.21.2参考文献 137

1.22在视频游戏中使用Web摄像机 138

Nathan d'Obrenan 138

1.22.1初始化Web摄像机捕获窗口 138

1.22.2操纵Web摄像机数据 143

1.22.3结论 147

1.22.4参考文献 147

第2章 数学技巧 1

绪论 151

Eddie Edwards 152

2.1浮点计算技巧:使用IEEE浮点格式以提高性能 152

YossarianKing 132

2.1.1概述 132

2.1.2 IEEE浮点格式 152

2.1.3浮点数技巧 133

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 165

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 172

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 184

2.4.1一种特殊情况 184

2.4.2优化实现 189

2.4.3总结 190

2.5平行移动镜头 191

Carl Dougan 191

2.5.1 技术 191

2.5.2结论 194

2.5.3参考文献 194

2.6 平滑的基于四元数的C2飞行路径 195

Alex Vlachos 195

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 202

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 210

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

绪论 219

SteveRabin 221

3.1 AI优化策略 221

Steve Rabin 221

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 228

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 233

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 240

3.4.1 RTS命令 240

3.4.2命令排队 240

3.4.3循环命令 242

3.4.4结论 244

3.4.5参考文献 244

3.5一种基于分片的高性能视域和搜索系统 245

MattPritchard 245

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 252

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 261

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 derSterren 269

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 277

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 283

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 289

3.11.1全新的世界 289

3.11.2有齿物群的模拟 291

3.11.3局限性和可改进的地方 291

3.11.4参考文献 292

3.12一个用C++编写的通用模糊状态机 293

EricDybsand 294

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 297

3.13.1 问题 297

3.13.2解决方案 298

3.13.3范例 299

3.13.4结论 303

3.13.5参考文献 303

3.14一个在游戏中使用神经元网络的例子 304

JohnManslow 304

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

绪论 313

EricLengyel 314

4.1各种VIPM方法的比较 314

Tom Forsyth 314

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

GregSnook 327

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 332

4.3.1包围球 332

4.3.2使用球形树 332

4.3.3演示应用程序 333

4.4压缩的轴向包围盒树 335

Miguel Gomez 335

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

MattPritchard 340

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 347

4.6.1鱼缸观察现象 347

4.6.2提高其真实性 349

4.6.3结论 349

4.7渲染打印分辨率的屏幕快照 350

Alex Vlachos 350

4.7.1基本算法 350

4.7.2 忠告及注意 353

4.7.3结论 353

4.7.4参考文献 353

4.8对任意表面应用贴花 354

EricLengyel 354

4.8.1算法 354

4.8.2三角形剪裁 356

4.8.3实现代码 357

4.8.4参考文献 357

4.9用天空包围盒渲染远景 358

Jason Shankel 358

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 362

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经典的SuperMario64游戏第三人称控制和动画 365

Steve Rabin 365

4.11.1设置 365

4.11.2转换控制器的输入 365

4.11.3旋转角色 367

4.11.4角色移动 368

4.11.5角色动画 368

4.11.6 SupelMario64动画分析 370

4.11.7结论 371

4.11.8参考文献 371

第5章 图形显示 375

绪论 375

D.SimDietrichJr 376

5.1卡通渲染:实时轮廓边缘检测与渲染 376

CarlS.Marshall 376

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 383

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 389

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 398

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 407

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 DietrichJr. 415

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 419

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 426

5.8.1硬件运算 426

5.8.2将来的工作 435

5.8.3致谢 435

5.8.4示例源码 435

5.8.5参考文献 435

第6章 音频编程 439

绪论 439

JamesBoer 440

6.1游戏音频设计模式 440

Scott Patterson 440

6.1.1桥接(Bridge) 440

6.1.2外观(Facade) 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大泥球(BigBallofMud)(也称做“意大利面条式”代码) 444

6.1.10结论 445

6.1.11参考文献 445

6.2在采样合成器中声音的同步重用技术 446

Thomas Engel 446

6.2.1存在的问题 446

6.2.2解决方案的思路 447

6.2.3解决方案 447

6.2.4结论 448

6.3软件DSP效果 450

IanLewis 450

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 454

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 463

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 474

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

IanLewis 481

核心类 481

索引 483

相关图书
作者其它书籍
返回顶部