资源大小: 65.89MB
发布时间: 2013-01-31
文件格式: pdf
下载次数: 0
分享到:

下载地址:

下载地址1
(本站为飞网专业下载站,域名:down.cfei.net)

资源简介:

中文名: 游戏编程精粹1原名: Game Programming Gems 1别名: 游戏编程精粹系列, 游戏编程, 游戏开发作者: (美)Mark DeLoura译者: 王淑礼张磊资源格式: PDF版本: 扫描版出版社: Posts&Telecom; Press书号: 711512587X发行时间: 2004年10月地区: 大陆语言: 简体中文简介: 内容介绍:    本书是由40多位国外游戏开发行业最为优秀的程序员撰稿的技术文集。每篇文章都针对游戏编程中的某个特定问题,不仅提供了解决思路,还给出了能立即应用到代码中的算法和源码。全书分为通用编程技术、数学技巧、人工智能、多边形技术和像素特效五章;附录部分提供了两个非常有用的工具库,矩阵工具库和文本工具库;随书附带光盘中包含有全书所有的源程序、演示程序、附录中的两个工具库以及glSet叩和GLUT等开发工具。      本书适合游戏开发专业人员阅读。专家级开发人员可以立刻应用书中介绍的技巧,而初中级程序员通过阅读本书将增强其技能和知识。本书是游戏程序员必备的参考资料。作者介绍:  姚勇, 1998年从清华大学毕业并留校工作, 从那时起开始研究RealtimeRendenng和游戏引擎技术. 2000年他组建H3DStudio, 开始正式研发3D游戏引擎. 经历了4年多的起伏跌宕, H3D由当初2、3人的小组发展成今天的大型游戏软件开发公司, 组建起了一支技术强劲的引擎开发及游戏产品制作队伍, 并立志成为中国游戏制作的HARDCORE. 如今姚勇带领下的H3D正在用历经4年研发的H3D大型3D网络游戏引擎平台,1制作一款重型3D网络游戏. 目录: 第1章 通用编程技术1.0 神奇的数据驱动设计(Steve Rabin)1.0.1 点子1——基础1.0.2 点子2——最低标准1.0.3 点子3——杜绝硬编码1.0.4 点子4——将控制流写成脚本1.0.5 点子5——什么时候不适合使用脚本?1.0.6 点子6——避免重复数据1.0.7 点子7——开发工具来生成数据1.0.8 结论1.1 面向对象的编程与设计技术(James Boer)1.1.1 代码风格1.1.2 类设计1.1.3 类层次结构设计1.1.4 设计模式1.1.5 总结1.1.6 参考资料1.2 使用模板元编程的快速数学方法(Pete Isensee)1.2.1 斐波纳契数1.2.2 阶乘1.2.3 三角学1.2.4 实际世界中的编译程序1.2.5 重访三角学1.2.6 模板和标准C++1.2.7 矩阵1.2.8 总结1.2.9 参考文献1.3 一种自动的Singleton工具(Scott Bilas)1.3.1 定义1.3.2 优点1.3.3 问题1.3.4 传统的解决方法1.3.5 较好的方法1.3.6 更好的方法1.3.7 参考文献1.4 在游戏编程中使用STL(James Boer)1.4.1 STL的类型和术语1.4.2 STL概念1.4.3 向量(Vector)1.4.4 链表(List)1.4.5 双队列(Deque)1.4.6 映射表(Map)1.4.7 堆栈(Stack),队列(Queue)和优先队列(Priority Queue)1.4.8 总结1.4.9 参考文献1.5 一个通用的函数绑定接口(Scott Bilas)1.5.1 要求1.5.2 关于平台1.5.3 第一次尝试1.5.4 第二次尝试1.5.5 部分解决方法1.5.6 调用约定1.5.7 调用函数1.5.8 完备解决方案1.5.9 结论1.5.10 参考文献1.6 通用的基于句柄的资源管理器(Scott Bilas)1.6.1 方法1.6.2 Handle类1.6.3 HandleMgr类1.6.4 使用示例1.6.5 注意1.6.6 参考文献1.7 资源和内存管理(James Boer)1.7.1 资源类1.7.2 资源管理类1.7.3 句柄如何工作1.7.4 可能的扩展和改进1.7.5 结论1.8 快速数据载入技巧(John Olsen)1.8.1 预处理你的数据1.8.2 保存你的数据1.8.3 使用简单方法载入你的数据1.8.4 更安全地载入你的数据1.9 基于帧的内存分配(Steven Ranck)1.9.1 常规内存分配的挑战1.9.2 介绍基于帧的内存1.9.3 分配和释放内存1.9.4 例子1.9.5 结论1.10 简单快速的位数组(Andrew Kirmse)1.10.1 概述1.10.2 位数组1.10.3 其他数组1.10.4 应用1.10.5 参考文献1.11 在线游戏的网络协议(Andrew Kirmse)1.11.1 定义1.11.2 篡改报文1.11.3 报文重放1.11.4 其他技术1.11.5 逆向工程1.11.6 实现1.11.7 参考文献1.12 最大限度地利用Assert(Steve Rabin)1.12.1 Assert基础1.12.2 Assert技巧 #1:嵌入更多信息1.12.3 Assert技巧 #2:嵌入更多更多信息1.12.4 Assert技巧 #3:使之更好用一些1.12.5 Assert技巧 #4:编写自己的assert宏1.12.6 Assert技巧 #5:无价之宝1.12.7 Assert技巧 #6:给“超级铁杆”1.12.8 Assert技巧 #7:让它更简单——复制和粘贴1.12.9 参考文献1.13 Stats:实时统计和游戏内调试(John Olsen)1.13.1 Why:需求驱动的技术1.13.2 How:一个进化过程1.13.3 What:一个基于C++类的系统1.13.4 Where:可用性1.13.5 小结1.14 实时的游戏内建剖析(Steve Rabin)1.14.1 开始考虑细节1.14.2 剖析器将告诉你什么?1.14.3 增加剖析器调用1.14.4 剖析器的实现1.14.5 ProfileBegin的细节1.14.6 ProfileEnd的细节1.14.7 处理剖析数据的细节1.14.8 后期增强1.14.9 将它们组合起来1.14.10 参考文献第2章 数学技巧2.0 可预测随机数(Guy W. Lecky-Thompson)2.0.1 可预测随机数2.0.2 替换算法2.0.3 无限宇宙算法2.0.4 结论与展望2.0.5 参考文献2.1 插值方法(John Olsen)2.1.1 使用浮点数学的帧速相关ease-out2.1.2 使用整型数学的帧速相关ease-out2.1.3 帧速无关线性内插2.1.4 帧速无关ease-in和ease-out2.1.5 危险地带2.2 求刚体运动方程的积分(Miguel Gomez)2.2.1 运动学:平移和旋转2.2.2 动力学:力与旋转力矩(torque)2.2.3 刚体的特性2.2.4 求运动方程的积分2.2.5 参考文献2.3 三角函数的多项式逼近(Eddie Edwards)2.3.1 多项式2.3.2 定义域和值域2.3.3 偶多项式和奇多项式2.3.4 泰勒级数2.3.5 截断的泰勒级数2.3.6 拉格朗日级数2.3.7 不连续性处理2.3.8 结论2.4 为数字稳定性而利用隐式欧拉积分(Miguel Gomez)2.4.1 求初值问题的积分及稳定性2.4.2 显式的欧拉方法2.4.3 隐式欧拉方法2.4.4 不准确性2.4.5 寻找隐式解2.4.6 结论2.4.7 参考文献2.5 小波:理论与压缩(Lo?c Le Chevalier)2.5.1 原理2.5.2 一个实例2.5.3 应用2.5.4 参考文献2.6 水面的交互式模拟(Miguel Gomez)2.6.1 二维波动方程2.6.2 边界条件:岛屿和海岸线2.6.3 实现问题2.6.4 与水面交互2.6.5 渲染2.6.6 参考文献2.7 游戏编程四元数(Jan Svarovsky)2.7.1 将四元数当作矩阵替换物2.7.2 为什么不使用欧拉角2.7.3 X、Y、Z和W代表什么2.7.4 源自什么数学基础2.7.5 四元数如何表示旋转2.7.6 参考文献2.8 矩阵和四元数之间的转换(Jason Shankel)2.8.1 四元数旋转2.8.2 四元数到矩阵的转换2.8.3 矩阵到四元数的转换2.8.4 参考文献2.9 四元数插值(Jason Shankel)2.9.1 四元数计算2.9.2 四元数插值2.9.3 示例代码2.9.4 推导2.10 最短弧四元数(Stan Melax)2.10.1 动机2.10.2 数值不稳定性2.10.3 稳定公式的推导2.10.4 残存不稳定性条件2.10.5 源代码2.10.6 虚拟跟踪球2.10.7 参考文献第3章 人工智能3.0 设计一个通用、健壮的AI引擎(Steve Rabin)3.0.1 事件驱动与轮询的对比3.0.2 消息概念3.0.3 状态机3.0.4 一个使用消息的事件驱动状态机3.0.5 交待时间(Confession Time)3.0.6 另一个小交待3.0.7 状态机构建单元3.0.8 状态机消息路由选择3.0.9 发送消息3.0.10 发送延迟的消息3.0.11 删除游戏对象3.0.12 增强:定义消息的范围3.0.13 增强:记录所有的消息活动和状态变迁3.0.14 增强:交换状态机3.0.15 增强:多状态机3.0.16 增强:一个状态机队列3.0.17 代码外部脚本化行为3.0.18 结论3.0.19 参考文献3.1 一个有限状态机类(Eric Dybsand)3.1.1 FSMclass和FSMstate3.1.2 定义FSMstate3.1.3 定义FSMclass3.1.4 为FSM创建状态3.1.5 使用FSM3.1.6 参考文献3.2 博弈树(Jan Svarovsky)3.2.1 极小极大算法的负极大改进算法3.2.2 α-β剪枝3.2.3 走步排序方法3.2.4 求精3.2.5 参考文献3.3 A*路径规划基础(Bryan Stout)3.3.1 问题3.3.2 方法概述3.3.3 A*的特性3.3.4 将A*应用到游戏路径规划3.3.5 A*的弱点3.3.6 进一步的工作3.3.7 参考文献3.4 A*审美优化(Steve Rabin)3.4.1 直路径3.4.2 多边形搜索空间中的直路径3.4.3 平滑路径3.4.4 预先计算的Catmull-Rom公式3.4.5 改进分级路径的直接性3.4.6 空旷区域上的分级寻径3.4.7 在分级搜寻过程中减少停顿3.4.8 最大化响应率3.4.9 结论3.4.10 参考文献3.5 A*速度优化(Steve Rabin)3.5.1 搜索空间优化3.5.2 算法优化3.5.3 结论3.5.4 参考文献3.6 简化的3D运动和使用导航网格进行寻径(Greg Snook)3.6.1 简述3.6.2 构造3.6.3 滚动骰子并且移动鼠标3.6.4 到此仅完成一半3.6.5 它是有效的,但不是那么完美3.6.6 结论3.6.7 参考文献3.7 Flocking:一种模拟群体行为的简单技术(Steven Woodcock)3.7.1 实现3.7.2 代码3.7.3 局限性与可能的改进3.7.4 资源与致谢3.8 用于视频游戏的模糊逻辑(Mason McCuskey)3.8.1 模糊逻辑如何工作3.8.2 模糊逻辑运算3.8.3 为模糊控制而刹车3.8.4 模糊逻辑的其他应用3.8.5 结论3.8.6 资源3.9 神经网络初探(André LaMothe)3.9.1 生物学仿真3.9.2 对游戏的应用3.9.3 神经网络1013.9.4 纯逻辑,Mr. Spock3.9.5 分类与“图像”识别3.9.6 Hebbian的Ebb3.9.7 运行Hopfield3.9.8 结论第4章 多边形技术4.0 为OpenGL优化顶点提交(Herbert Marselas)4.0.1 即时模式4.0.2 交叉存取数据4.0.3 步数据和流数据4.0.4 编译过的顶点数组4.0.5 取消数据复制厂家指定扩展4.0.6 数据格式4.0.7 一般建议4.0.8 结论4.0.9 参考文献4.1 调整顶点的投影深度值(Eric Lengyel)4.1.1 考察投影矩阵4.1.2 矫正深度值4.1.3 选择一个适当的4.1.4 实现4.1.5 源代码4.2 矢量摄像机(David Paull)4.2.1 矢量摄像机初步4.2.2 本地空间优化4.2.3 结论4.3 摄像机控制技术(Dante Treglia II)4.3.1 一种基本的第一人称摄像机4.3.2 脚本摄像机4.3.3 摄像机技巧4.4 一种快速的圆柱棱台相交测试算法(Eric Lengyel)4.4.1 视域棱台4.4.2 计算有效半径4.4.3 算法4.4.4 实现4.5 3D碰撞检测(Kevin Kaiser)4.5.1 算法概述4.5.2 包围球碰撞检测4.5.3 三角形对三角形的碰撞检测4.6 用于交互检测的多分辨率地图(Jan Svarovsky)4.6.1 使用栅格4.6.2 对象大小变化的问题4.6.3 多分辨率地图4.6.4 源代码4.7 计算到区域内部的距离(Steven Ranck)4.7.1 问题4.7.2 算法描述4.7.3 应用4.8 对象阻塞剔除(Tim Round)4.8.1 可视棱台裁剪4.8.2 阻塞剔除4.8.3 总结4.9 永远不要让他们看到你的“抖动”——几何体细节层次选择问题(Yossarian King)4.9.1 LOD选择4.9.2 放大率因子4.9.3 滞变阈值4.9.4 实现4.9.5 其他问题4.10 八叉树构造(Dan Ginsburg)4.10.1 八叉树概述4.10.2 八叉树数据4.10.3 建立树4.10.4 多边形重迭4.10.5 相邻节点4.10.6 应用4.10.7 结论4.10.8 参考文献4.11 松散的八叉树(Thatcher Ulrich)4.11.1 四叉树4.11.2 包围体4.11.3 划分物体4.11.4 使它松散4.11.5 比较4.11.6 结论4.12 独立于观察的渐进网格(Jan Svarovsky)4.12.1 渐进网格概述4.12.2 关于这个主题的变种4.12.3 边缘选择函数4.12.4 难处理的边4.12.5 实现4.12.6 源代码4.12.7 参考文献4.13 插值的3D关键帧动画(Herbert Marselas)4.13.1 线性插值4.13.2 对顶点和法线进行插值4.13.3 Hermite样条插值4.13.4 对顶点进行样条插值4.13.5 为什么用Hermite样条4.13.6 总结4.13.7 参考文献4.14 一种快速而简单的皮肤构造技术(Torgeir Hagland)4.14.1 为什么对低多边形有价值4.14.2 方法4.14.3 总结4.14.4 参考文献4.15 填充间隙——使用缝合和皮肤构造的高级动画(Ryan Woodland)4.15.1 缝合4.15.2 皮肤构造(Skinning)4.15.3 进一步的问题4.15.4 参考文献4.16 实时真实地形生成(Guy W. Lecky-Thompson)4.16.1 风景设计4.16.2 建筑物4.16.3 命名算法4.16.4 参考文献4.17 分形地形生成——断层构造(Jason Shankel)4.17.1 断层构造4.17.2 减少dHeight4.17.3 生成随机直线4.17.4 腐蚀(erosion)4.17.5 示例代码4.17.6 参考文献4.18 分形地形生成——中点置换(Jason Shankel)4.18.1 一维中点置换4.18.2 二维中点置换——菱形正方形算法4.18.3 高地中的菱形——正方形算法4.19 分形地形生成——粒子沉积(Jason Shankel)4.19.1 MBE模型4.19.2 粒子沉积4.19.3 倒置火山口4.19.4 示例代码4.19.5 参考文献第5章 像素特效5.0 2D镜头光晕(Yossarian King)5.0.1 方法5.0.2 实现5.0.3 源代码5.1 将3D硬件用于2D子画面特效(Mason McCuskey)5.1.1 进入3D5.1.2 建立3D场景5.1.3 建立纹理5.1.4 绘制3D子画面5.1.5 添加特效5.1.6 结论5.2 基于运动的静态光照(Steven Ranck)5.2.1 传统的静态光照5.2.2 基于运动的静态光照5.2.3 结论5.3 使用定点颜色插值模拟实时光照(Jorge Freitas)5.3.1 光照方法5.3.2 美工创作5.3.3 插值光照5.3.4 结论5.4 衰减图(Sim Dietrich)5.4.1 讲解5.4.2 比较衰减图与光照图5.4.3 CSG效果5.4.4 基于范围的雾5.4.5 其他形状5.4.6 结论5.5 使用纹理坐标生成技术的高级纹理(Ryan Woodland)5.5.1 简单纹理坐标动画5.5.2 纹理投影5.5.3 反射映射5.5.4 参考文献5.6 硬件凹凸贴图(Sim Dietrich)5.6.1 如何将凹凸图应用于对象上5.6.2 为法线选择一个空间5.6.3 另一种方法:使用正切空间凹凸贴图5.6.4 解决方案:纹理空间凹凸贴图5.6.5 纹理空间问题5.6.6 结论5.6.7 参考文献5.7 底面阴影(Yossarian King)5.7.1 阴影数学5.7.2 实现5.7.3 扩展5.8 复杂对象上的实时阴影(Gabor Nagy)5.8.1 介绍5.8.2 光源、遮挡物体和接收物体5.8.3 本文的目的5.8.4 创建阴影图5.8.5 在接收物体上投影阴影图5.8.6 渲染接收物体5.8.7 对基本算法的扩展与改进5.8.8 参考文献5.9 使用光滑预过滤和Fresnel项改善环境映射反射(Anis Ahmad)5.9.1 第一个不正确的假设5.9.2 第二个不正确的假设5.9.3 结论5.9.4 致谢5.9.5 参考文献5.10 游戏中玻璃的效果(Gabor Nagy)5.10.1 介绍5.10.2 透明物体5.10.3 光栅化程序、帧缓冲、Z缓冲和像素混合5.10.4 不透明物体与透明物体5.10.5 绘制不透明物体5.10.6 绘制透明物体5.10.7 反射5.10.8 有色玻璃5.10.9 将它们放到一起5.10.10 实现5.10.11 参考文献5.11 用于容器中液体的折射贴图(Alex Vlachos,Jason L. Mitchell)5.11.1 介绍5.11.2 折射项5.11.3 反射项5.11.4 Fresnel项5.11.5 使用硬件渲染5.11.6 该技术的扩展5.11.7 结论5.11.8 参考文献第6章 附录6.0 矩阵工具库(Dante Treglia II,Mark A. DeLoura)6.1 文本工具库(Dante Treglia II)6.2 关于随书光盘(Mark A. DeLoura)作者索引


飞网下载站,免费下载共享资料,内容涉及教育资源、专业资料、IT资源、娱乐生活、经济管理、办公文书、游戏资料等。