《3D游戏引擎设计:实时计算机图形学的应用方法(第2版)》详细阐述了与3D游戏引擎设计相关的高效解决方案及相应的数据结构和算法,主要包括图形系统、渲染器、场景图、控制器动画、空间排序、细节级别、碰撞检测、物理学、标准对象、曲线、曲面、包含测试、距离计算方案、相交计算、数值方案、旋转计算、面向对象结构、内存管理以及基于着色器的特效。此外,《3D游戏引擎设计:实时计算机图形学的应用方法(第2版)》还提供了相应的算法、代码以及伪代码,以帮助读者进一步理解相关方案的实现过程。《3D游戏引擎设计:实时计算机图形学的应用方法(第2版)》适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。
本书第1版于2000年9月面世,当时,着色器语言尚未出现于民用级图形硬件中,全部渲染行为均在固定功能管线中完成,即设置渲染状态进而控制几何数据与绘制操作之间的操作方式。
Wild Magic始自0.1版本,并涵盖了1015个源文件以及17个示例应用程序,共计101293行代码。该版本发布时仅支持Microsoft Windows操作系统,且渲染器构建于OpenGL之上,项目文件由Microsoft Visual C++ 6.0提供。随后,源代码进化至Wild Magic 3.9,并兼顾Linux和Macintosh平台,以及OpenGL和Direct3D渲染器。除此之外,Wild Magic 3.9还对着色器程序设计提供了某些支持。尽管如此,该版本的引擎仍构建于固定功能管线之上。需要说明的是,Wild Magic 3.9支持多个版本的Microsoft编译器、其他平台上的编译器以及某些开发工具,例如导入器和导出器,进而可对艺术设计素材进行处理。
本书第2版包括诸多新增特性,例如着色器程序设计以及引擎的支持方式。本书在原有基础上增加了大量内容并涉及与图形系统相关的诸多细节知识,特别是着色器与几何管线之间的拟合方式。另外,场景图材质及其管理操作均得到了较大程度的扩展。同时,本书第2版涵盖了更为丰富的图像信息,并在一定程度上减少了与引擎相关的数学知识。
本书第2版发布了Wild Magic 4.0,其中包括1587个源文件和105个示例应用程序,共计249860行代码。最新版本支持Windows、Linux以及Macintosh平台,并采用OpenGL渲染器。另外,Windows平台还支持Direct3D渲染器,其性能与OpenGL相比毫不逊色。同时,多个版本的Microsoft C++均得到了较好的支持,包括版本6.0、7.0、7.1以及8.0(专业版和精简版)。除此之外,MINGW编译器和MSYS环境同样在Windows平台上得到了较好的支持。Linux平台使用了g++编译器,而Macintosh平台则采用了Apple Xcode工具。
Wild Magic 4.0图形系统则完全基于着色器系统,并采用NVIDIA推出的Cg编程语言。针对OpenGL,预编译着色器程序通过arbvp1和arbfp1配置项创建;而对于Direct3D,则可使用vs_2_0和ps_2_0配置项,因而图形硬件应对此予以支持进而运行示例应用程序。若图形硬件仅支持少量的配置项,例如vs_1_1和ps_1_1,则须通过此类配置项重新编译当前着色器程序,并生成对应输出结果而非本书附带光盘所发布的内容。Wild Magic 4.0版本包含了基于着色器的全功能软件渲染器,并以此彰显几何管线的各方面内容,而非仅是顶点着色器和像素着色器。
着色器方案逐渐替代了固定功能方案,这也使得Wild Magic 4.0成为一款功能强大的图形引擎,并适用于多种图形应用程序,而非仅限于游戏程序。经过多方努力,该引擎兼具易用性和可扩展性等特征,并在渲染器性能方面获得了长足的进步。借此,也希望读者对Wild Magic 4.0版本给予更多的支持。
本书的出版是多方努力的共同结果,这里要感谢审稿人对本书第1版所提出的极具价值的反馈意见,这极大地增加了本书第2版的可读性。另外,还要感谢Marc Olano(巴尔的摩马里兰大学)选用本书第1版作为授课教材,凭借其丰富的个人经验,他对本书提出了许多中肯的建议;感谢制作编辑和策划编辑Elisabeth Beller,她所引领的工作团队为本书内容增添了浓重的色彩;最后,还要感谢编辑Tim Cox,他的耐心和帮助使得本人的另一本书籍得以出版。
关于作者
目前,Dave Eberly出任Geometric Tools, Inc.(其网址为www.geometrictools.com)总裁一职,该公司致力于计算机图形学、图像分析以及数字方案的软件开发。在此之前,他任职Numerical Design Ltd.(NDL)技术总监,该公司负责实时3D游戏引擎NetImmerse的研发工作。另外,他还参与了NDL的Gamebryo引擎研发工作,该引擎定位于NetImmerse之后的次世代引擎。Dave Eberly曾先后获得了布鲁斯堡大学数学学士学位,北卡罗来纳大学教堂山分校计算机科学理学硕士和博士学位,其专著包括《游戏物理学》(出版于2004年),《3D游戏引擎体系结构》(出版于2005年),并与Philip Schneider协作出版了《计算机图形学几何工具》一书(出版于2003年),且均由Morgan Kaufmann出版社出版。作为一名数学工作者,其研究领域涉及燃烧学、数字和图像处理以及统计学中的长度偏差分布问题。除此之外,Dave Eberly还曾兼任圣安东尼奥德克萨斯大学U.T.健康科学中心副教授一职。1991年,他放弃了终身职位并于北卡罗来纳大学专攻计算机图形学。1994年毕业后,在随后的一年时间里,Dave Eberly兼任神经外科计算机图形学研究副教授一职,研发方向为SAS/Insight,即一款以统计图形学为主的软件工具。最终,Dave Eberly决定将计算机图形学和几何学作为职业发展方向,并先后就职于NDL(Emergent Game Technologies公司前身)和Magic Software,Inc.(现更名为Geometric Tools)。Dave Eberly积极参与新闻组(对应网址为comp.graphics.algorithms)的交流活动,并致力于推广3D图形技术。在他的引领下,公司网站以及个人专著均散发着无穷的创造力。
本书光盘
本书附带光盘包含Wild Magic 4.0版本。其中,许可证协议、安装和版本说明以及源代码分别位于以下目录树中:
GeometricTools/WildMagic4/Wm4FoundationLicense.pdf
GeometricTools/WildMagic4/Wm4RestrictedLicense.pdf
GeometricTools/WildMagic4/Wm4InstallationRelease.pdf
GeometricTools/WildMagic4/LibFoundation
GeometricTools/WildMagic4/LibGraphics
GeometricTools/WildMagic4/LibPhysics
GeometricTools/WildMagic4/LibRenderers
GeometricTools/WildMagic4/LibApplications
示例应用程序、数据集以及各类数据项则位于其他目录中。Wild Magic引擎的官方网站包含了引擎更新记录、文件变更历史、问题修复、已知问题以及与引擎相关的附加素材。
1. LibFoundation目录
* Approximation目录。该目录包含基于高斯分布、直线、平面、二次曲线、二次表面以及多项式的点集匹配拟合方案。
* ComputationGeometry目录。该目录包含凸壳构造过程、Delaunay三角剖分、耳式剪裁三角剖分以及有理数运算。
* Containment目录。该目录包含基于盒体、胶囊体、圆柱体、椭球体、菱形体以及球体的点集包含测试。除此之外,该目录还包含最小空间盒体以及最小空间球体包含测试。
* Curves目录。该目录包含了抽象类并计算如下内容:位置、导数、切线、速度、弧长、基于弧长的参数重置、细分算法、曲率、扭矩、法线、副法线、多项式曲线、Bezier曲线、B样条曲线、NURBS曲线、3次样条曲线以及张力-偏移-连续性曲线。
* Distance目录。该目录包含对象间的距离计算。
* ImageAnalysis目录。该目录包含2D和3D图像分析处理的基本例程,例如从2D图像析取各级曲线,或者从3D图像中析取各级表面。
* Interpolation目录。该目录包含数据的插值计算,其中包括Akima插值、双三次插值、分段式二次插值、球体插值、薄板样条插值、双线性插值、双三次薄板样条插值以及向量域插值。另外,分散数据插值则采用Delaunay三角剖分和四面体剖分方案。
* Intersection目录。该目录包含对象间的相交计算,其中包括静态和动态查询、相交测试查询以及相交信息查询。
* Mathematics目录。该目录包含了点、向量、矩阵、四元数以及某些三角形函数的快速计算。另外,该目录还提供了引擎中所使用的对象源代码。
* Meshes目录。该目录包含了图形图像应用程序所使用的顶点-边-三角形表实现方案。
* NumericalAnalysis目录。该目录包含二分根值计算、基于对称矩阵的特征向量计算、积分计算、线性方程计算、最小化计算(不采用导数方式)、常微分方程计算以及多项式根值计算。
* Surfaces目录。该目录包含了抽象类,并计算位置、导数、切线、法线、主曲率和方向、参数表面的派生类(包括B样条和NURBS)以及隐式表面(包括二次表面)。
* System目录。该目录封装了与操作系统相关的特定需求(包括Windows,Linux和Macintosh)。
2. LibGraphics目录
* Collision目录。该目录包含了与碰撞检测相关的内容,包括碰撞分组、碰撞信息以及包围体树。
* Controllers目录。该目录包含了各类动画控制器,例如关键帧动画、变形机制、皮肤-骨骼机制、点-粒子系统以及逆向动力学。
* Curves目录。该目录支持曲线细分和渲染操作。
* Detail目录。该目录支持细分级别计算,包括离散计算、连续计算以及广告牌效果。
* Effects目录。该目录支持着色器特效计算,包括光照-材质、纹理机制、顶点着色、平面反射以及平面投影阴影。
* ObjectSystem目录。该目录包含了引擎的面向对象结构,例如运行期类型信息、智能指针、独立命名和标识机制、流操作、premain初始化操作以及postmain终止操作。
* Rendering目录。该目录包含抽象渲染API、相机对象、光照、纹理和图像、帧缓冲区和全局渲染状态,包括混合操作、面剔除操作、材质、多边形偏移、目标缓冲区状态、线框模式以及深度缓冲区机制。
* SceneGraph目录。该目录支持场景图管理行为,其中包括树形结构、内部节点、叶节点、点-粒子图元、直线图元、三角形图元、包围体、转换操作、层次结构剔除机制、顶点缓冲区以及索引缓冲区。
* Shaders目录。该目录针对着色器和像素着色器提供了基本支持,其中包括着色器程序、着色器常量、纹理采样器以及程序和纹理图像的共享机制。
* Shared Arrays目录。针对对象间的数据共享,该目录提供了相应的数组实例化方案。
* Sorting目录。该目录支持渲染排序操作,其中包括二分空间树(BSP树)和入口结构。
* Surfaces目录。该目录支持表面细分计算和渲染操作。
* Terrain目录。该目录支持连续/非连续细分级别的地形处理。
3. LibPhysics目录
* Intersection目录。该目录包含区间(1D环境下)、轴对齐矩形(2D环境下)、轴对齐盒体(3D环境下)以及基于时间一致性的快速相交检测。
* LCPSolver目录。该目录提供了线性互补问题的数值求解方案,包括凸多边形和凸多面体之间的距离计算方法。
* ParticleSystem目录。该目录包含了粒子系统和质体-弹簧系统的物理学方案。
* RigidBody目录。该目录提供了刚体、凸多面体的质量和惯性计算方法。
4. LibRenderers目录
* Dx9Renderer目录。该目录提供了基于Direct3D的抽象API实现。
* OpenGLRenderer目录。该目录提供了基于OpenGL的抽象API实现。
* SoftRenderer目录。该目录提供了基于软件的抽象API实现。
5. LibApplications目录
* Dx9Application目录。该目录包含了基于Direct3D渲染的应用程序层。
* OpenGLApplication目录。该目录包含了基于OpenGL渲染的应用程序层。
* SoftApplication目录。该目录包含了基于软件渲染的应用程序层。
本书附带光盘中的全部内容均已上传至www.tup.com.cn,请读者自行下载。
第1章 概述
1.1 图形硬件和游戏发展史
1.2 本书版本与软件发展史
1.3 章节导读
第2章 图形系统
2.1 基础知识
2.1.1 坐标系
2.1.2 右手规则/左手规则和叉积计算
2.1.3 点和向量
2.2 转换操作
2.2.1 线性转换
2.2.2 仿射转换
2.2.3 透视转换
2.2.4 透视投影的特征
2.2.5 齐次点和矩阵 第1章 概述
1.1 图形硬件和游戏发展史
1.2 本书版本与软件发展史
1.3 章节导读
第2章 图形系统
2.1 基础知识
2.1.1 坐标系
2.1.2 右手规则/左手规则和叉积计算
2.1.3 点和向量
2.2 转换操作
2.2.1 线性转换
2.2.2 仿射转换
2.2.3 透视转换
2.2.4 透视投影的特征
2.2.5 齐次点和矩阵
2.3 相机
2.3.1 透视相机模型
2.3.2 模型空间和对象空间
2.3.3 世界空间
2.3.4 视见空间、相机空间和眼睛空间
2.3.5 剪裁空间、投影空间或齐次空间
2.3.6 窗口空间
2.3.7 整合结果
2.4 剔除操作和剪裁操作
2.4.1 对象剔除操作
2.4.2 背面剔除
2.4.3 基于视锥体的剪裁操作
2.5 光栅化操作
2.5.1 直线段
2.5.2 圆形
2.5.3 椭圆
2.5.4 三角形
2.6 顶点属性
2.6.1 颜色
2,6.2 光照和材质
2.6.3 纹理
2.6.4 透明度和混合操作
2.6.5 雾效果
2.6.6 其他
2.6.7 光栅化属性
2.7 软件、硬件和API
2.7.1 概述
2.7.2 可移植性和性能
2.8 API规范
2.8.1 矩阵的表达和存储方式
2.8.2 矩阵累积计算
2.8.3 视见矩阵
2.8.4 投影矩阵
2.8.5 窗口坐标系
2.8.6 旋转操作
2.8.7 基于图形API的快速计算
第3章 渲染器
3.1 软件渲染
3.1.1 顶点着色器
3.1.2 背面剔除
3.1.3 剪裁操作
3.1.4 光栅化操作
3.1.5 边缓冲区
3.1.6 扫描线处理过程
3.1.7 像素着色器
3.1.8 模板缓冲机制
3.1.9 深度缓冲区
3.1.10 Alpha混合操作
3.1.11 颜色蒙版
3.1.12 纹理采样
3.1.13 帧缓冲区
3.2 硬件渲染
3.3 抽象渲染API
3.3.1 构造和析构
3.3.2 相机管理
……
第4章 场景图
第5章 控制器动画
第6章 空间排序
第7章 细节级别
第8章 碰撞检测
第9章 物理学
第10章 标准对象
第11章 曲线
第12章 曲面
第13章 包含测试
第14章 距离计算方案
第15章 相交计算
第16章 数值方案
第17章 旋转计算
第18章 面向对象结构
第19章 内存管理
第20章 基于着色器的特效
附录A在WildMagic中生成着色器
参考文献