本书综合介绍了当前流行的三维游戏技术,主要内容包括:建模及基础数学;经典的三维图形学;二维技术;实时渲染及交互式三维图形渲染技术;游戏的软件技术——引擎的体系结构以及多玩家技术;游戏领域的其他新兴主题,例如人工智能、物理以及碰撞检测。\r\n 本书的大部分主题均结合一个具体的游戏开发系统Fly3D(包含在光盘中)加以讲述,这有助于读者直接编写源代码来实现制作动画的梦想。通过编写或修改插件,读者可以对书中的实例进行试验,甚至可以开发出属于自己的游戏。\r\n 本书适合作为高等院校相关专业的教材,亦可供相关的研究人员和从业者参考与学习。\r\n
第1章 三维计算机图形学的数学基础\r\n 1.1 处理三维结构\r\n 1.2 向量与计算机图形学\r\n 1.3 光线与计算机图形学\r\n 1.4 具有多边形性质的双线性插值\r\n 1.5 使用SIMD指令集的基础数学引擎\r\n第2章 建模与表示1─对比回顾与多边形网格模型\r\n 2.1 介绍\r\n 2.2三维物体的多边形表示\r\n 2.2.1创建多边形对象\r\n 2.3 高级方法——构造性实体几何法\r\n 2.4 应用建模器或编辑器的高级方法\r\n第3章 建模与表示2—多边形网格的经济性\r\n 3.1 多边形压缩模型\r\n 3.2几何压缩(每个顶点的信息)\r\n 3.3 编码连接\r\n 3.4 三角链\r\n 3.5 局部与全局算法\r\n 3.6 顶点缓冲的应用\r\n 3.7细节层次(Level Of Detail, LOD)处理\r\n第4章 三维表达和建模-地形特殊化\r\n 4.1 介绍\r\n 4.2简单的高度场地形\r\n 4.3地形的建模过程—分形\r\n 4.4 地形LODs:三角二叉树(Triangle Bintrees)\r\n 4.5用光线投射的方法渲染地形\r\n第5章 建模和表示方法 \r\n 5.1 介绍\r\n 5.2 贝塞尔曲线\r\n 5.3 B-样条曲线\r\n 5.4 有理曲线\r\n 5.5 从曲线到曲面\r\n 5.6 建模或创建面片曲面\r\n 5.7 渲染参数曲面\r\n 5.8 游戏中的实用贝塞尔曲线\r\n第6章 经典多边形网格渲染技术\r\n 6.1 图形流水线内的坐标空间和几何操作\r\n 6.2 视见空间内的操作\r\n 6.3 图形流水线内的算法操作\r\n 6.4渲染例子\r\n第7章 传统映射技术\r\n 7.1 简介\r\n 7.2 两维纹理贴图到多边形网格物体\r\n 7.3 二维纹理空间到双三次参数曲面片物体\r\n 7.4 凹凸映射\r\n 7.5 环境映射技术\r\n 7.6 三维纹理域的映射技术\r\n第8章 反走样(Anti-aliasing)理论和实践\r\n 8.1引言\r\n 8.2走样和采样\r\n 8.3锯齿边\r\n 8.4计算机图形采样和实际采样的比较\r\n 8.5采样和重构\r\n 8.6简单的比较\r\n 8.7前滤波方法\r\n 8.8超采样或后滤波\r\n 8.9纹理映射中的反走样\r\n 8.10图像的Fourier变换\r\n第9章 复杂场景的可视性处理\r\n 9.1介绍\r\n 9.2 为什么要用树结构?\r\n 9.3 BSP 树\r\n 9.4 包围体层次结构\r\n 9.5 BSP树和多边形物体\r\n 9.6 用于构造内型环境的特殊手段\r\n 9.7 入口和镜子\r\n 9.8 高级视见约束体筛选\r\n 9.9 精确的可视性\r\n 9.10 动态物体及其可视性\r\n第10章 游戏中的光照效果\r\n 10.1光照贴图\r\n 10.2使用光照贴图的动态光照效果\r\n 10.3动态光源(Dynamic Light)\r\n 10.5雾贴图/容积雾(Fog Map/Volumetric Fog)\r\n 10.6 光照例子的研究\r\n第11章 游戏中的阴影\r\n 11.1 阴影的特性\r\n 11.2 经典的阴影算法\r\n 11.3 游戏中的阴影\r\n第12章 多路渲染\r\n 12.1介绍\r\n 12.2 多路函数性(Multi-pass Functionality)\r\n 12.3 多路渲染算法\r\n 12.5 多纹理(Multi-texture)\r\n 12.6 多纹理实例\r\n第13章 运动控制\r\n 13.1 简介\r\n 13.2 对动画进行预编辑——线性插值及耗用时间\r\n 13.3 预编辑动画——插值问题\r\n 13.4 预编辑动画——显式编辑\r\n 13.5 旋转插值\r\n 13.6 用四元数表示旋转\r\n 13.7 将相机作为动画对象\r\n 13.8 粒子动画\r\n 13.10 关节结构\r\n第14章 动态仿真控制\r\n 14.1著名示例-脱机动画中的动力学(dynamics)\r\n 14.2初值问题和边值问题\r\n 14.3主题范围\r\n 14.4 动态仿真的动机\r\n 14.5 基本经典粒子论\r\n 14.6 基本经典刚体理论\r\n 14.7 动态仿真的实用性\r\n 14.8数值积分(Numerical Integration)\r\n第15章 碰撞检测(Collision Detection)\r\n 15.1 广义/狭义二阶段算法\r\n 15.2 包围体层次结构\r\n 15.3 使用AABB的广义碰撞检测\r\n 15.4 使用OBB的广义碰撞检测\r\n 15.5 使用局部或对象空间划分的广义碰撞检测\r\n 15.6 狭义碰撞检测\r\n 15.7 单阶段方法\r\n第16章 交互控制\r\n 16.1 交互与动画\r\n 16.2 控制器模块\r\n 16.3 用户-对象交互 使用简单阻尼的6自由度控制\r\n 16.4 用户-对象动画 4键汽车模拟\r\n 16.5 对象-对象交互\r\n 16.6 摄影机-对象交互\r\n 16.7 具有简单自治行为的对象\r\n 16.7.1炮台\r\n 16.8 用户-场景交互\r\n第17章 行为与人工智能\r\n 17.1 确定的方法和体系结构\r\n 17.3 主体结构的例子\r\n 17.5 作为例子的感知视觉的作用\r\n 17.6 认知结构(Learning Architecture)\r\n第18章 二维技术\r\n 18.1 图像金字塔\r\n 18.2 小波变换\r\n 18.3 图象变换及基矩阵\r\n 18.4 小波和电脑游戏\r\n 18.5 图像变形——变形转换技术(Morphing)\r\n第19章 基于图像的渲染\r\n 19.1介绍\r\n 19.2 重复使用已绘制的图像——二维技术\r\n 19.3变化的渲染资源\r\n 19.4使用深度信息\r\n 19.5 视见插值\r\n 19.6 四维技术—泛光或光场渲染技术\r\n 19.7照片建模和IBR\r\n第20章 多人游戏技术\r\n……\r\n第21章 引擎体系结构\r\n第22 章 Fly3D 软件开发工具包(SDK)参考\r\n \r\n \r\n
近年来, 随着数字技术突飞猛进的发展, 计算机图形学(Computer Graphics, CG)作为一种图形设计的方法及工具, 已在世界范围内得到了普遍的重视, 成为计算机科学中最为活跃的领域之一. 计算机图形学是一门建立在计算机科学. 数学. 物理. 心理学以及艺术基础上的综合学科, 它主要研究如何在计算机中表示图形, 以及利用计算机进行图形计算. 处理和显示的相关原理与算法. 目前已被广泛地应用于娱乐. 计算机辅助设计(Computer AidedDesign, CAD). 科学可视化及系统可视化领域, 形成了一系列新的研究方向.
在当今世界上, 在CG技术方面处于领先地位的国家是美国和日本. 自1968年美国科学家第一次在实验室中将自己亲属的照片扫描进计算机(这也是对计算机图形学的首次尝试)开始, 计算机图形学已经在美国发展了整整35年, 其中1975年开始举办的SIGGRAPH(计算机图形艺术联合)展不仅极大推动了美国CG技术的发展, 而且已经发展成为世界CG技术的年度展览会. 同时, 日本也依赖其特有的动漫文化产业的支持, 为全球CG业, 尤其是电子游戏及动画领域输送了大量人才, 推动了各种游戏软件及硬件的发展. 如今在这些国家, CG技术已经广泛深入到影视制作. 游戏制作. 个人艺术创作. 多媒体教育等社会各个层面, 每年给国家带来近千亿美元的经济利润. 可以说, CG已经成为一种产业, 深刻影响着一个国家的经济和文化发展.
三维游戏开发是计算机图形学中一个重要的研究方向, 对开发人员而言, 不仅需要熟练掌握图形学中的原理和技术, 同时还需具备人工智能. 计算机网络等多方面的知识. 随着游戏产业朝着专业化的方向发展, 游戏程序的开发逐渐分离为两大块内容:开发游戏引擎和使用游戏引擎开发游戏. 其中游戏引擎是针对某一类特定形式的游戏所定制的二次开发平台, 它使游戏设计者可以较少地关心程序技术本身, 而专心致力于游戏可玩性的设计. 本书旨在为当今的三维游戏引擎技术提供一个综合的解决方案, 将游戏理论技术与具体引擎代码分析相结合, 使读者阅读后能够初步具备游戏引擎的开发能力.
本书分为两卷. 卷1主要从理论上探讨最新的游戏引擎技术, 包括建模技术. 真实感图形生成技术. 实时渲染技术. 动画技术, 以及声音. 输入输出控制和物理引擎等高级技术, 力求使读者能有一个较完备的理论知识背景, 在日后开发中对各方面的技术具有系统的把握能力.
卷2从实践的角度出发, 具体描述了一个游戏引擎的构建过程, 着重于基本开发工具的使用. 软件构架. 开发技巧和优化等方面, 并结合具体的游戏代码详细说明, 帮助读者将卷1的理论付诸于实践, 使读者尽快进入开发者角色. 此外, 卷2还初步介绍了游戏设计原理和游戏引擎的使用, 主要目的在于使游戏引擎开发者能够了解整个游戏开发过程和客户(游戏设计者)的需求.
本书最后给出了一个完整的三维游戏引擎实例, 该引擎采用C++语言开发, 基于Win-dows平台运行, 并且支持Direct X9. 我们鼓励读者在看懂实例的基础上进一步加入自己的想法, 不断完善, 从而增强实际动手能力. 成为一名专业的游戏引擎开发人员.
由于时间仓促, 翻译中出现的任何不妥之处还请各位读者见谅. 在一年多的翻译过程中, 复旦大学的领导和老师给予了大力的支持和帮助, 同时我们还得到了复旦大学计算机科学与工程系高性能可视化仿真实验室的协助. 本书主要由沈一帆. 陈文斌. 朱怡波翻译, 参加翻译的还有金万军. 顾源泓. 张睿. 牟涛. 滕莉. 陈峥. 李宏宇. 施荣杰. 岳军. 李晨佳. 周斌. 杨树林. 陆瀛海. 吴鸿智. 杜浩. 葛云鹏. 曹杰. 曹贡献. 张蕊. 吴若寒. 雷迦吟. 罗毅. 陈珊珊.
译者
2004年11月
Alan Watt,来自英国谢菲尔德大学,曾经编写过多本优秀著作,包括《3D Computer Graphics,Advanced Animation and Rendering Techniques》和《The Computer Image》。
Fabio Policarpo,来自里约热内卢的软件开发者,并且是Paralelo计算机公司的创始人,目前正致力于独立三维动作多玩家游戏的研究。
出版者的话
专家指导委员会
译者序
前言
第一部分 基础知识
第1章 三维计算机图形学的数学基础
1. 1 处理三维结构
1. 2 向量与计算机图形学
1. 3 光线与计算机图形学
1. 4 多边形性质的双线性插值
1. 5 使用SIMD指令集的基础数学引擎
第2章 建模与表示1--对比回顾与多边形网格模型
2. 1 简介
2. 2 三维物体的多边形表示
2. 3 高级方法--构造性实体几何法
2. 4 应用建模器或编辑器的高级方法
第3章 建模与表示2--多边形网格的经济性
3. 1 多边形模型压缩
3. 2 几何形状压缩(每个顶点的信息)
3. 3 编码连接
3. 4 三角链
3. 5 局部与全局算法
3. 6 顶点缓冲的应用
3. 7 细节层次处理
第4章 建模与表示3--地形特殊化
4. 1 简介
4. 2 简单的高度场地形
4. 3 地形的建模过程--分形
4. 4 地形LOD:三角二叉树
4. 5 用光线投射的方法渲染地形
第5章 建模与表示4--贝济埃. B样条和细分曲面
5. 1 简介
5. 2 贝济埃曲线
5. 3 B样条曲线
5. 4 有理曲线
5. 5 从曲线到曲面
5. 6 建模或创建面片曲面
5. 7 渲染参数曲面
5. 8 游戏中的实用贝济埃技术
5. 9 细分曲面
5. 10 缩放性--多边形网格. 面片网格和细分曲面
第二部分 传统3D图形处理方法
第6章 传统多边形网格渲染技术
6. 1 图形流水线中的坐标空间和几何操作
6. 2 视见空间里的操作
6. 3 图形流水线中的算法操作
6. 4 渲染示例
第7章 传统映射技术
7. 1 简介
7. 2 二维纹理贴图到多边形网格物体
7. 3 二维纹理空间到双三次参数曲面片物体
7. 4 凹凸纹理映射
7. 5 环境映射技术
7. 6 三维纹理域技术
7. 7 对比试验
第8章 反走样理论和实践
8. 1 简介
8. 2 走样和采样
8. 3 锯齿边
8. 4 计算机图形采样和实际采样的比较
8. 5 采样和重构
8. 6 简单的比较
8. 7 前滤波方法
8. 8 超采样或后滤波
8. 9 纹理映射中的反走样
8. 10 图像的傅里叶变换
第三部分 实时渲染
第9章 复杂场景的可视性处理
9. 1 简介
9. 2 为什么要用树结构
9. 3 BSP树
9. 4 包围体层次结构
9. 5 BSP树和多边形物体
9. 6 用于构造内型环境的特殊手段
9. 7 入口和镜子
9. 8 高级视见约束体筛选
9. 9 精确的可视性
9. 10 动态物体及其可视性
第10章 游戏中的光照效果
10. 1 光照贴图
10. 2 使用光照贴图的动态光照效果
10. 3 动态光源
10. 4 可调/可分离的光源
10. 5 雾贴图/容积雾
10. 6 光照例子的研究
第11章 游戏中的阴影
11. 1 阴影的特性
11. 2 经典的阴影算法
11. 3 游戏中的阴影
第12章 多路渲染
12. 1 简介
12. 2 多路函数性
12. 3 多路算法
12. 4 多路采样方法
12. 5 多纹理
12. 6 多纹理实例
第四部分 对象的控制
第13章 运动控制
13. 1 简介
13. 2 对动画进行预编辑--线性插值及耗用时间
13. 3 预编辑动画--插值问题
13. 4 预编辑动画--显式编辑
13. 5 旋转插值
13. 6 用四元数表示旋转
13. 7 将照相机作为动画对象
13. 8 粒子动画
13. 9 粒子动画与计算机游戏
13. 10 关节结构
第14章 动态仿真控制
14. 1 著名示例--脱机动画中的动力学
14. 2 初值问题和边值问题
14. 3 主题范围
14. 4 动态仿真的动机
14. 5 基本经典粒子论
14. 6 基本经典刚体论
14. 7 动态仿真的实用性
14. 8 数值积分
第15章 碰撞检测
15. 1 广义/狭义二阶段算法
15. 2 包围体层次结构
15. 3 使用AABB的广义碰撞检测
15. 4 使用OBB的广义碰撞检测
15. 5 使用局部或对象空间划分的广义碰撞检测
15. 6 狭义碰撞检测
15. 7 单阶段方法
第16章 交互控制
16. 1 交互与动画
16. 2 控制器模块
16. 3 用户-对象交互--使用简单阻尼的6自由度控制
16. 4 用户-对象动画--4键汽车仿真
16. 5 对象-对象交互
16. 6 照相机-对象交互
16. 7 具有简单自治行为的对象
16. 8 用户-场景交互
第17章 行为与人工智能
17. 1 确定的方法和体系结构
17. 2 主体和层次
17. 3 主体体系结构的例子
17. 4 认知模型和情景演算
17. 5 作为例子的感知视觉的作用
17. 6 认知结构
第五部分 二维技术
第18章 二维技术
18. 1 图像金字塔
18. 2 小波变换
18. 3 图像变换与基矩阵
18. 4 小波与计算机游戏
18. 5 图像变形--变形转换技术
第19章 基于图像的渲染
19. 1 简介
19. 2 重复使用已绘制的图像--二维技术
19. 3 变化的渲染资源
19. 4 使用深度信息
19. 5 视见插值
19. 6 四维技术--泛光或光场渲染方法
19. 7 照片建模和IBR
第六部分 软件技术
第20章 多人游戏技术
20. 1 简介
20. 2 定义
20. 3 多人游戏的实现
20. 4 多人游戏所面临的问题
20. 5 简化通信信息
20. 6 应用客户-服务器模式实现多人游戏
第21章 引擎体系结构
21. 1 C++游戏编程
21. 2 游戏中复杂度的管理和改进
21. 3 引擎设计和体系结构
21. 4 Fly3D软件体系结构
第22章 Fly3D软件开发工具包参考
22. 1 简介
22. 2 全局参考
22. 3 对象参考
附录 A Fly3D SDK教程
参考文献