现代游戏动画有点像黑色艺术。没有太多可用的资源来详细说明如何构建轨迹驱动的动画系统,或者像对偶四元数蒙皮这样的高级主题。这就是本书想要填补的空白。这本书的目标是阐明动画编程的黑色艺术,让每个人都能接触到这个话题。
这本书采取“从理论到实现”的方法,在这里你将学习每个首先讨论的主题的理论。一旦你理解了这个理论,你就会实施它来获得实践经验。
这本书的重点是动画编程的概念和实现细节,而不是所使用的语言或图形应用编程接口。通过关注这些基本概念,您将能够实现一个动画系统,而不管语言或图形应用编程接口如何。
这本书是为想学习如何构建现代动画系统的程序员准备的。跟随这本书的唯一要求是熟悉 C++。除此之外,从如何打开一个新窗口,到创建一个 OpenGL 上下文,渲染一个动画模型,以及高级动画技术,一切都涵盖在内。
第一章 *【创建游戏窗口】*介绍了如何新建 visual studio 项目,创建 Win32 窗口,设置 OpenGL 3.3 渲染上下文,启用 vsynch。本书的代码示例是针对 OpenGL 3.3 编译的。所有的 OpenGL 代码都兼容最新版本的 OpenGL 和 OpenGL 4.6。
第二章 【实现向量】,涵盖游戏动画编程的向量数学。
第三章 【实现矩阵】,讨论游戏动画编程的矩阵数学。
第四章 *【实现四元数】*解释了如何使用四元数数学进行游戏动画编程。
第 5 章 *【实现变换】*解释了如何将位置、旋转和缩放组合成一个变换对象。这些变换对象可以按层次结构排列。
第 6 章 *【构建抽象渲染器】*向您展示了如何在 OpenGL 3.3 之上创建抽象层。本书的其余部分将使用这种抽象进行渲染。通过使用抽象,我们可以专注于动画编程的核心概念,而不是用来实现它的应用编程接口。抽象层以 OpenGL 3.3 为目标,但代码对 OpenGL 4.6 也有效。
第七章 ,了解 glTF 文件格式,介绍 glTF 文件格式。glTF 是大多数 3D 内容创建工具都支持的标准开放文件格式。能够加载一个通用的格式将让你加载几乎任何创作工具创作的动画。
第 8 章 创建曲线、帧和轨迹,介绍了如何插值曲线以及如何使用关键点为存储在层次结构中的变换设置动画。
第九章 【实现动画剪辑】,讲解如何实现动画剪辑。动画剪辑会随着时间的推移修改变换层次结构。
第 10 章 *【网格蒙皮】*介绍了如何对网格进行变形,使其与动画剪辑采样生成的姿势相匹配。
第十一章 *【优化动画流水线】*为大家展示了如何优化动画流水线的各个部分,让其更快更有制作准备。
第 12 章 ,动画之间的融合,解释了如何将两个动画姿势融合在一起。这种技术可以用来在两个动画之间平滑切换,没有任何视觉爆音。
第十三章 ,实现逆运动学,讲述了如何使用逆运动学让动画与环境互动。例如,您将学习如何使动画角色的脚在不平坦的地形上不穿透地面。
第十四章 ,使用对偶四元数进行蒙皮,涵盖了游戏动画的对偶四元数数学。可以使用双四元数来避免动画关节处的挤压。
第 15 章 *【渲染实例化人群】*展示了如何将动画数据编码到纹理中,并将姿势生成移动到顶点着色器中。您将使用此技术使用实例化来渲染大量人群。
为了充分利用这本书,需要一些 C++ 的经验。你不需要成为一个强硬的 C++ 大师,但是你应该能够调试简单的 C++ 问题。有一些 OpenGL 的经验是一个优势,但不是必需的。没有使用高级的 C++ 特性。提供的代码根据 C++ 11 或最新版本进行编译。
本书中的代码是针对 OpenGL 3.3 Core 编写的。本书呈现的 OpenGL 代码是向前兼容的;发布时 OpenGL 的最高兼容版本是 4.6。在 第 6 章 中,构建一个抽象渲染器,你将在 OpenGL 之上实现一个薄的抽象层。在本书的剩余部分,您将针对这个抽象层进行编码,而不是直接使用 OpenGL。
所展示的代码应该可以在几乎任何运行 Windows 10 或更新版本的笔记本电脑上编译和运行。本书唯一需要遵循的硬件要求是能够运行 Visual Studio 2019 或更高版本的计算机。
Visual Studio 2019 的最低硬件要求是:
- Windows 10,版本 1703 或更高版本
- 1.8 Ghz 或更快的处理器
- 2GB 内存
这些要求可以在网上找到:https://docs . Microsoft . com/en-us/visualstudio/releases/2019/system-requirements
下载示例代码文件
你可以从你在http://www.packt.com的账户下载这本书的示例代码文件。如果您在其他地方购买了这本书,您可以访问http://www.packt.com/support并注册将文件直接通过电子邮件发送给您。
您可以按照以下步骤下载代码文件:
- 登录或注册http://www.packt.com。
- 选择“支持”选项卡。
- 点击代码下载和勘误表。
- 在搜索框中输入图书的名称,并按照屏幕上的说明进行操作。
下载文件后,请确保使用最新版本的解压缩文件夹:
- 视窗系统的 WinRAR/7-Zip
- zipeg/izp/un ARX for MAC
- 适用于 Linux 的 7-Zip/PeaZip
这本书的代码包也在 GitHub 上托管在https://GitHub . com/packt publishing/Game-Animation-Programming。如果代码有更新,它将在现有的 GitHub 存储库中更新。
我们还有来自 https://github.com/PacktPublishing/丰富的书籍和视频目录的其他代码包。看看他们!
本书通篇使用了许多文本约定。
CodeInText
:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟网址、用户输入和推特句柄。比如;"将下载的WebStorm-10*.dmg
磁盘映像文件作为另一个磁盘安装到您的系统中."
代码块设置如下:
public:
Pose();
Pose(const Pose& p);
Pose& operator=(const Pose& p);
Pose(unsigned int numJoints);
任何命令行输入或输出都编写如下:
# cp /usr/src/asterisk-addons/configs/cdr_mysql.conf.sample
/etc/asterisk/cdr_mysql.conf
粗体:表示一个新的术语,一个重要的单词,或者你在屏幕上看到的单词,例如在菜单或对话框中,也像这样出现在文本中。例如:“从管理面板中选择系统信息
注意
警告或重要注意事项是这样出现的。
提示和技巧是这样出现的。
我们随时欢迎读者的反馈。
一般反馈:如果您对本书的任何方面有疑问,请在您的信息主题中提及书名,并通过[email protected]
向我们发送电子邮件。
与作者取得联系:与该书作者加博尔取得联系的最佳方式是在推特上:@gszauer
。
勘误表:虽然我们已经尽了最大努力来确保内容的准确性,但错误还是会发生。如果你在这本书里发现了一个错误,如果你能向我们报告,我们将不胜感激。请访问,http://www.packt.com/submit-errata,选择您的图书,点击勘误表提交链接,并输入详细信息。
盗版:如果您在互联网上遇到任何形式的我们作品的非法拷贝,如果您能提供我们的位置地址或网站名称,我们将不胜感激。请联系我们在 [email protected] 与链接的材料。
如果你有兴趣成为一名作者:如果有一个你有专长的话题,你有兴趣写或写一本书,请访问http://authors.packtpub.com。
请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?然后,潜在的读者可以看到并使用您不带偏见的意见来做出购买决定,我们在 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们的书的反馈。谢谢大家!
更多关于 Packt 的信息,请访问packt.com。