|
中文名: 游戏编程精粹3
原名: Game Programming Gems 3
别名: 游戏编程, 游戏开发
作者: Dante Treglia
译者: 张磊
图书分类: 软件
资源格式: PDF
版本: 扫描版
出版社: 人民邮电出版社
书号: 7115108706
发行时间: 2003年7月
地区: 大陆
语言: 简体中文
简介:
内容介绍:
本书汇集了近70篇最新的游戏编程大师的技术文章。这些文章都来自于实际经验的积累,各有独到之处,依其所属领域不同,全书划分为通用编程技术、数学技巧、人工智能、图形、网络和多玩家游戏、音频处理六章,覆盖了当今游戏开发中的所有关键技术领域。
本书适合游戏开发专业人员阅读。对于入门级的读者,本书指出了您将要面临的各方面挑战,并提供大量的参考资料和资源助您提高专业知识和技术;对于专家级的读者,本书中实用的新思想与新技巧将帮助您节省大量游戏开发的宝贵时间。
作者介绍:
Thor Alexander thor@hardcodedgames.com
Thor Alexander在过去的10年中致力于为游戏界创造更为可信的智能人物角色。最近,他创建了Hard Coded Games公司(位于德克萨斯州奥斯汀),为在线游戏创造具有艺术效果的人工智能和机器学习。在此之前,他在Electronic Arts、微软还有Xatrix Entertainment担任过资深人工智能开发和设计人员,同时他还是Asgard Interactive的创始人之一,并且是Harbinger Technologies的CEO。他是hyperSim智能人物系统和GoCap(Game Observation Capture)的发明者.
内容截图:
下载地址:
目录:
第1章 通用编程技术
简介 (作者:Kim Pallister)
1.1 调度游戏中的事件 (作者:Michael Harvey,Carl S.Marshall)
1.1.1 调度器的组成
1.1.2 一个简单的调度器
1.1.3 高级概念
1.1.4 结论
1.1.5 参考文献
1.2 一个基于对象组合的游戏架构 (作者:Scott Patterson)
1.2.1 游戏开发的各个阶段
1.2.2 游戏架构设计
1.2.3 游戏架构实现
1.2.4 源代码
1.2.5 参考文献
1.3 让C中的宏重现光辉 (作者:Steve Rabin)
1.3.1 声明
1.3.2 第1个宏技巧: 把枚举值转化为字符串
1.3.3 第2个宏技巧: 利用二进制表达式得到编译期常量
1.3.4 第3个宏技巧:给标准断言添加描述性注释
1.3.5 第4个宏技巧:编译期断言
1.3.6 第5个宏技巧:得到一个数组里面的元素个数
1.3.7 第6个宏技巧: 在一个字符串中间加入__LINE__
1.3.8 第7个宏技巧:防止进入无限循环
1.3.9 第8个宏技巧:小型的特制语言
1.3.10 第9个宏技巧:简化类接口
1.3.11 结论
1.3.12 参考文献
1.4 平台无关的函数绑定代码生成器 (作者:Allen Pouratian)
1.4.1 年轻与智慧
1.4.2 概要
1.4.3 细节
1.4.4 脚本
1.4.5 网络
1.4.6 结论
1.4.7 参考文献
1.5 基于句柄的智能指针 (作者:Brian Hawkins)
1.5.1 用法
1.5.2 句柄
1.5.3 智能指针
1.5.4 结论
1.5.5 参考文献
1.6 定制STL分配器 (作者:Pete Isensee)
1.6.1 一个范例
1.6.2 分配器的基础
1.6.3 分配器的要求
1.6.4 缺省的分配器对象
1.6.5 编写自己的分配器
1.6.6 潜在的用途
1.6.7 分配器状态数据
1.6.8 一些建议
1.6.9 实现细节
1.6.10 结论
1.6.11 参考文献
1.7 立即存盘 (作者:Martin Brownlow)
1.7.1 为何如此困难
1.7.2 SAVEMGR类
1.7.3 SAVEOBJ类
1.7.4 数据类型与扩展
1.7.5 重载缺省函数
1.7.6 一个简单的例子
1.7.7 结论
1.8 自动列表设计模式 (作者:Ben Board)
1.8.1 实现
1.8.2 实现时的注意事项
1.8.3 结论
1.9 浮点异常处理 (作者:Soren Hannibal)
1.9.1 为什么要崩溃
1.9.2 你的程序处理浮点异常么
1.9.3 异常的类型
1.9.4 代码
1.9.5 调试浮点错误
1.9.6 结论
1.10 使用UML开发一个配合设计的游戏引擎 (作者:Thomas Demachy)
1.10.1 对象就在游戏之中
1.10.2 动态的类——正如动态的棋子
1.10.3 协作与迭代
1.10.4 实现上的问题
1.10.5 结论
1.10.6 参考文献
1.11 使用Lex和Yacc分析自定义数据文件 (作者:Paul Kelly)
1.11.1 Lex
1.11.2 Yacc
1.11.3 优点与缺陷
1.11.4 Yacc和Lex中的交互
1.11.5 针对游戏子系统的自定义数据文件
1.11.6 把数据输出工具与Lex和Yacc结合起来
1.11.7 一个完整的例子
1.11.8 结论
1.11.9 如何得到Flex和Bison
1.11.10 参考文献
1.12 为世界市场开发游戏 (作者:Aaron Nicholls)
1.12.1 市场潜力
1.12.2 门面事,先处理——显示和输入
1.12.3 字符集
1.12.4 界面和设计方面的考虑
1.12.5 本地化
1.12.6 设计和规划中的考虑
1.12.7 测试
1.12.8 结论
1.12.9 参考文献
1.13 3D游戏中的实时输入和用户界面 (作者:Greg Seegert)
1.13.1 实现用户界面
1.13.2 指定用户界面元素
1.13.3 本地化问题
1.13.4 输入系统
1.13.5 鼠标与操纵杆
1.13.6 在处理延迟方面用户界面的作用
1.13.7 结论
1.13.8 参考文献
1.14 自然的选择:饼状菜单的演化 (作者:Don Hopkins)
1.14.1 Feng GUI的饼状菜单
1.14.2 对饼状菜单的研究与评估
1.14.3 饼状菜单插件
1.14.4 未来发展方向
1.14.5 走进SimCity中的城镇
1.14.6 Sims中的起居室
1.14.7 结论
1.14.8 参考文献
1.15 轻量级的、基于规则的日志记录 (作者:Brian Hawkins)
1.15.1 规则
1.15.2 调试标志
1.15.3 配置文件
1.15.4 可配置的标志值
1.15.5 日志记录
1.15.6 用法
1.15.7 结论
1.15.8 参考文献
1.16 日志服务 (作者:Eric Robert)
1.16.1 管理信息
1.16.2 系统层次
1.16.3 Journal接口
1.16.4 创建日志服务
1.16.5 结论
1.16.6 参考文献
1.17 实时的层次化性能评测 (作者:Greg Hjeistrom,Byon Garrabrant)
1.17.1 性能评测树
1.17.2 用法
1.17.3 实现
1.17.4 结论
1.17.5 参考文献
第2章 数学技巧
简介 (作者:John Byrd)
2.1 对数与随机数生成的2基快速函数 (作者:James McNeill)
2.1.1 整数的2基对数
2.1.2 位掩码与随机数生成
2.1.3 函数是如何工作的
2.1.4 参考文献
2.2 使用分数矢量得到更精确的几何图形 (作者:Thomas Young)
2.2.1 问题
2.2.2 一个解决方法:分数矢量
2.2.3 使用分数矢量
2.2.4 数字的范围
2.2.5 实现上的细节
2.2.6 结论
2.2.7 参考文献
2.3 三角函数的更多近似计算方法 (作者:Robin Green)
2.3.1 衡量误差
2.3.2 正弦与余弦函数
2.3.3 多项式逼近
2.3.4 有关收敛性的注意事项
2.3.5 结论
2.3.6 参考文献
2.4 四元数的压缩 (作者:Mark Zarb-Adami)
2.4.1 四元数
2.4.2 三个最小数方法
2.4.3 极点方法
2.4.4 实现
2.4.5 性能
2.4.6 结论
2.4.7 答谢
2.4.8 参考文献
2.5 受限的逆向运动学 (作者:Jason Weber)
2.5.1 骨节层次
2.5.2 循环坐标推演
2.5.3 旋转限制
2.5.4 调整每个骨节,同时保持限制
2.5.5 结论
2.5.6 参考文献
2.6 针对物理建模的单元自动机 (作者:Tom Forsyth)
2.6.1 CA基础
2.6.2 八叉树
2.6.3 实际的物理
2.6.4 核心处理模型
2.6.5 气体
2.6.6 水流
2.6.7 流速
2.6.8 热量
2.6.9 火焰
2.6.10 动态更新速率
2.6.11 结论
2.6.12 参考文献
2.7 在动态仿真中处理摩擦 (作者:Miguel Gomez)
2.7.1 库仑摩擦力
2.7.2 数值方法
2.7.3 一个三维公式
2.7.4 几何图形问题
2.7.5 结论
2.7.6 参考文献
第3章 人工智能
简介 (作者:Steven WoodCock)
3.1 经GoCap优化过的机器学习 (作者:Thor Alexander)
3.1.1 GoCap架构一览
3.1.2 训练开车
3.1.3 学习规则
3.1.4 结论
3.1.5 参考文献
3.2 区域游览:对寻径模式的扩展 (作者:Ben Board,Mike Ducker)
3.2.1 辞旧
3.2.2 迎新
3.2.3 分而治之
3.2.4 路径遍历
3.2.5 对此模式的扩展
3.2.6 结论
3.2.7 参考文献
3.3 基于函数指针的内嵌式有限状态机 (作者:Charles Farris)
3.3.1 什么是有限状态机
3.3.2 FSM的实现
3.3.3 实现CFSM
3.3.4 使用CFSM
3.3.5 结论
3.3.6 参考文献
3.4 在RTS中的地形分析——一个隐藏的重要因素 (作者:Daniel Higgins)
3.4.1 区域
3.4.2 凸包
3.4.3 重要的匹配器
3.4.4 关隘
3.4.5 进行地形分析
3.4.6 结论
3.4.7 参考文献
3.5 一个针对AI代理、对象,以及任务的可扩展触发器系统 (作者:Steve Rabin)
3.5.1 触发器系统简介
3.5.2 对象自有的触发器系统
3.5.3 定义条件
3.5.4 使用布尔逻辑组合条件
3.5.5 定义响应
3.5.6 求取触发器的值
3.5.7 一次性触发与载入次数
3.5.8 使用标志和计数器将触发器结合起来
3.5.9 触发器系统与脚本语言的对比
3.5.10 局限性
3.5.11 结论
3.5.12 参考文献
3.6 基于A*算法的战术式寻径 (作者:William van der Sterren)
3.6.1 有风险的A*
3.6.2 对于有缺陷路径的战术式改良
3.6.3 暴露时间与对敌人建模
3.6.4 威胁并不仅仅是静态的
3.6.5 更战术化的改进
3.6.6 性能
3.6.7 有效的火力线以及视野的探测
3.6.8 扩展的A*算法的代价
3.6.9 ASE程序
3.6.10 结论
3.6.11 参考文献
3.7 快速游览网格的方法 (作者:Stephen White,Christopher Christensen)
3.7.1 静态障碍与动态障碍
3.7.2 游览网格
3.7.3 门户
3.7.4 建表
3.7.5 其他的门户相关问题
3.7.6 表示生物
3.7.7 动态障碍
3.7.8 在静态障碍与动态障碍之间进行游览
3.7.9 有关游览网格的其他想法
3.7.10 结论
3.8 在寻径与碰撞之间选择一种关系 (作者:Thomas Young)
3.8.1 在碰撞控制下的运动
3.8.2 对于寻径的碰撞模型
3.8.3 方法1:具有容错性的AI
3.8.4 方法2:在无障碍空间一个子集内的寻径
3.8.5 方法3:使用寻径器本身处理人物碰撞
3.8.6 实现沿路的运动
3.8.7 结论
3.8.8 参考文献
第4章 图形
简介 (作者:Jeff Lander)
4.1 消除T形连接与重新三角化 Eric Lengyel
4.1.1 T形连接的消除
4.1.2 重新三角化
4.1.3 实现
4.1.4 结论
4.2 快速高程场法线的计算 (作者:Jason Shankel)
4.2.1 一个任意网格上的法线
4.2.2 高程场法线
4.2.3 结论
4.2.4 例子程序
4.2.5 参考文献
4.3 快速计算面片法线 (作者:Martin Brownlow)
4.3.1 定义
4.3.2 传统方法
4.3.3 相关问题
4.3.4 一个更简单的方法
4.3.5 其他的优点
4.3.6 此方法的精确度有多大
4.3.7 结论
4.3.8 参考文献
4.4 快速、简单的遮蔽剪裁 (作者:Wagner T.Corrêa,Princeton University)
4.4.1 可见性问题
4.4.2 PLP算法
4.4.3 cPLP算法
4.4.4 讨论
4.4.5 实验结果
4.4.6 结论
4.4.7 参考文献
4.5 三角形条带的创建、优化以及渲染 (作者:Carl S.Marshall)
4.5.1 三角形条带
4.5.2 三角形条带的创建
4.5.3 优化
4.5.4 渲染
4.5.5 倾向于缓存的三角形条带
4.5.6 连续分层细节的三角形条带
4.5.7 结论
4.5.8 参考文献
4.6 针对复杂数据集计算优化阴影体 (作者:Alex Vlachos,Drew Card)
4.6.1 前期工作
4.6.2 算法
4.6.3 优化算法
4.6.4 参考文献
4.7 针对人物运动的表面细分 (作者:William Leeson)
4.7.1 各种细分模式
4.7.2 骨节的层次化结构以及顶点积累缓冲
4.7.3 优化
4.7.4 系统集成
4.7.5 源代码
4.7.6 结论
4.7.7 参考文献
4.8 改良的骨节变换计算 (作者:Jason Weber)
4.8.1 背景知识
4.8.2 简单的方法
4.8.3 添加骨节
4.8.4 改变权重
4.8.5 系统集成与优化
4.8.6 结论
4.8.7 参考文献
4.9 针对真实人物运动的架构 (作者:Thomas Young)
4.9.1 问题:针对任意目标的运动
4.9.2 问题:运动之间的平滑过渡
4.9.3 解决问题的一个架构:局部修正器与独立的插值系数
4.9.4 应用:处理任意目标的运动
4.9.5 位移修正器
4.9.6 应用:变换
4.9.7 其他细节
4.9.8 结论
4.9.9 参考文献
4.10 可编程顶点着色器的编译器 (作者:Adam Lake)
4.10.1 可编程顶点着色器
4.10.2 编译器
4.10.3 编译器的组成部分
4.10.4 结论
4.10.5 致谢
4.10.6 参考文献
4.11 画板光束 (作者:Brian Hawkins)
4.11.1 矩阵
4.11.2 顶点
4.11.3 UV映射
4.11.4 结论
4.12 针对等测引擎的3D技术 (作者:Greg Snook)
4.12.1 进入第三个维度
4.12.2 方法1:画板越多,效果越好
4.12.3 方法2:变换纹理
4.12.4 方法3:垂直插值的纹理
4.12.5 结论
4.12.6 参考文献
4.13 使用法向地图进行曲面模拟 (作者:Oscar Blasco)
4.13.1 法向地图
4.13.2 整个过程的纵览
4.13.3 数据准备
4.13.4 投影线
4.13.5 得到细节信息
4.13.6 后处理
4.13.7 已知的问题
4.13.8 其他方法
4.13.9 结论
4.13.10 致谢
4.13.11 参考文献
4.14 动态的、具有照片效果的地形光照 (作者:Naty Hoffman,Kenny Mitchell)
4.14.1 背景知识
4.14.2 解的分类
4.14.3 日照:地平角、椭圆阴影以及PTM
4.14.4 天空光照:辐射透过量的近似与分块
4.14.5 活动的云层阴影
4.14.6 基于视频的解决方案
4.14.7 非地形对象
4.14.8 结论
4.14.9 参考文献
4.15 立体图光照技术 (作者:Kenneth L.Hurley)
4.15.1 立体图的物理属性
4.15.2 如何与立体图进行数据交换
4.15.3 使用立体图进行渲染
4.15.4 对云层进行编码
4.15.5 在一个立体图中对光源进行编码
4.15.6 在立体图中渲染散射光照
4.15.7 将日夜循环编码进立体图中
4.15.8 结论
4.15.9 参考文献
4.16 程序纹理 (作者:Mike Milliger)
4.16.1 参数与函数
4.16.2 进入游戏世界
4.16.3 硬件加速
4.16.4 结论
4.16.5 致谢
4.16.6 参考文献
4.17 独一无二的纹理 (作者:Tom Forsyth)
4.17.1 程序纹理
4.17.2 智能纹理缓存
4.17.3 合成模型
4.17.4 层的映射与变换
4.17.5 层的源与过滤器
4.17.6 合成方法
4.17.7 对数字的控制
4.17.8 动态纹理
4.17.9 可扩展性
4.17.10 使用CPU还是图形芯片进行合成运算
4.17.11 演示程序
4.17.12 结论
4.17.13 参考文献
4.18 使用纹理作为查找表进行逐像素光照计算 (作者:Alex Vlachos, John Isidoro,Chris Oat)
4.18.1 不使用立体图进行h归一化(n.h/h.h映射)的镜面逐像素光照
4.18.2 使用一个(n.h)k图的逐像素镜面指数
4.18.3 色彩偏移的光晕
4.18.4 拥有正确的逐像素衰减的逐像素点光照
4.18.5 拥有正确的逐像素衰减的逐像素聚光灯与方向性光照
4.18.6 结论
4.18.7 参考文献
4.19 使用手工制作的着色模型进行渲染 (作者:Jan Kautz)
4.19.1 着色模型
4.19.2 基于微表面的着色模型
4.19.3 NDF着色
4.19.4 使用NDF的凸凹贴图
4.19.5 扩展
4.19.6 结论
4.19.7 参考文献
第5章 网络和多玩家游戏
简介 (作者:Andrew Kirmse)
5.1 将实时策略游戏中的延迟最小化 (作者:Jim Greer, EA.com,Zachary Booth Simpson, Mine Control)
5.1.1 帧锁定与事件锁定
5.1.2 时间同步
5.1.3 结论
5.1.4 参考文献
5.2 实时策略网络协议 (作者:Jan Svarovsky)
5.2.1 其他的协议
5.2.2 我们的协议
5.2.3 精炼
5.2.4 有用的模块
5.2.5 在StarTopia中容易犯的错误
5.2.6 示例游戏
5.2.7 结论
5.2.8 参考文献
5.3 一个针对巨量多玩家游戏的灵活的仿真架构 (作者:Thor Alexander)
5.3.1 架构一览
5.3.2 支持类
5.3.3 核心类
5.3.4 管理器与工厂
5.3.5 把它们都组合起来
5.3.6 结论
5.3.7 参考文献
5.4 对多玩家游戏进行扩展 (作者:Justin Randall)
5.4.1 改善游戏公平度的策略
5.4.2 设计可扩展的服务器
5.4.3 分布负载
5.4.4 优化
5.4.5 结论
5.4.6 参考文献
5.5 基于模板的对象序列化 (作者:Jason Beardsley)
5.5.1 现存的解决方案
5.5.2 可移植性
5.5.3 Serializer 类
5.5.4 扩展与优化
5.5.5 未来的工作
5.5.6 结论
5.5.7 参考文献
5.6 安全套接字 (作者:Pete Isensee)
5.6.1 IPSec
5.6.2 警告
5.6.3 安全连接
5.6.4 包格式
5.6.5 发送数据
5.6.6 接收数据
5.6.7 示例实现
5.6.8 CryptoAPI
5.6.9 性能
5.6.10 安全性
5.6.11 结论
5.6.12 参考文献
5.7 一个网络监控与模拟工具 (作者:Andrew Kirmse)
5.7.1 界面
5.7.2 网络监控
5.7.3 TCP模拟
5.7.4 UDP模拟
5.7.5 主机带宽模拟
5.7.6 结论
5.8 使用DirectPlay 8.1创建多玩家游戏 (作者:Gabriel Rohweder)
5.8.1 DirectPlay内幕
5.8.2 数据传输
5.8.3 可重入的回调函数
5.8.4 使用DirectPlay发送语音
5.8.5 相关资源
5.9 使用Java微型版开发无线游戏 (作者:David Fox)
5.9.1 网络特性
5.9.2 Java微型版
5.9.3 J2ME网络精髓
5.9.4 HTTP的限制
5.9.5 优化数据包
5.9.6 从服务器获取图像
5.9.7 结论
5.9.8 参考文献
第6章 音频处理
简介 (作者:Scott Patterson)
6.1 使用Ogg Vorbis进行音频压缩 (作者:Jack Moffitt)
6.1.1 心理声学压缩
6.1.2 使用压缩的情况
6.1.3 使用Ogg的代码示例
6.1.4 结论
6.1.5 参考文献
6.2 创建一个美妙的3D音频环境 (作者:Garin Hiebert)
6.2.1 3D音频的核心概念
6.2.2 有效地使用你的音频引擎
6.2.3 实现
6.2.4 结论
6.2.5 参考文献
6.3 使用轴对齐的边界框设置音障 (作者:Carlo Vogelsang)
6.3.1 问题
6.3.2 解决方法
6.3.3 实现
6.3.4 结论
6.3.5 参考文献
6.4 使用双二次共振滤波器 (作者:Phil Burk)
6.4.1 数字滤波器的工作原理
6.4.2 IIR与FIR滤波器
6.4.3 双二次滤波器的实现
6.4.4 改变变量
6.4.5 避免异常情况
6.4.6 控制滤波器
6.4.7 计算此滤波器的系数
6.4.8 低通滤波器
6.4.9 高通滤波器
6.4.10 带通滤波器
6.4.11 将滤波器进行串联
6.4.12 将滤波器进行并联
6.4.13 软件
6.4.14 结论
6.4.15 参考文献
6.5 语音压缩与音效的线性预测编码 (作者:Eddie Edwards)
6.5.1 对语音建模
6.5.2 软件仿真
6.5.3 取代声带
6.5.4 控制重新合成器
6.5.5 增加扬声器的深度
6.5.6 对数据编码
6.5.7 速度
6.5.8 实验
6.5.9 参考文献
6.6 复杂声音的随机合成方法 (作者:Phil Burk)
6.6.1 线性同余算法
6.6.2 噪声种类
6.6.3 软件示例
6.6.4 软件
6.6.5 结论
6.6.6 参考文献
6.7 针对游戏的实时模块化音频处理 (作者:Frank Luchs)
6.7.1 模块化音频处理
6.7.2 通过程序生成声音
6.7.3 Sphinx MMOS系统
6.7.4 处理器
6.7.5 模块文件简介
6.7.6 模块文件的应用
6.7.7 源代码
6.7.8 结论
6.7.9 参考文献
索引
|
|