


资源介绍
主要内容概览
全书分为 4 个部分,共 14 章,围绕游戏角色动画的高级技术展开,从基础模型加载到复杂的动画融合和交互实现。
第一部分:用游戏角色模型填充世界
使用 Open Asset Import Library
介绍 Open Asset Import Library(Assimp)的数据结构,讲解如何加载模型文件,包括嵌入纹理、解析节点层次结构、导入动画等。
扩展 UI,添加基于 ImGui 的文件对话框,实现模型实例的动态添加和删除。
将动画计算从 CPU 迁移到 GPU
引入计算着色器,利用 GPU 的大规模并行架构加速节点位置计算,减轻 CPU 负担。
介绍性能分析方法,调整数据模型以适应 GPU 计算,实现节点计算在 GPU 上的迁移和调试。
添加视觉选择功能
实现 “移动到实例” 功能,添加坐标箭头标识选中实例,创建按钮将选中实例居中显示。
为选中实例添加高亮效果,通过鼠标点击选择模型实例,实现空对象以允许取消选择。
第二部分:将模型查看器转换为动画编辑器
增强应用程序处理
实现编辑模式和查看模式的切换,区分不同模式下的配置。
添加更改还原功能,实现撤销和重做操作,通过回调函数和菜单实现相关功能。
保存和加载配置
比较文本和二进制文件格式的优缺点,选择 YAML 格式存储配置。
介绍 YAML 文件结构,添加 YAML 解析器,实现配置文件的保存和加载,处理可能的错误。
扩展相机处理
支持多个相机,实现从单个相机到相机数组的扩展,提取和调整相机设置。
定义默认自由相机,添加和删除相机,实现不同类型相机(第一人称、第三人称、固定相机等),支持相机切换和正交投影。
第三部分:调整角色动画
增强动画控制
实现动画混合,利用查找表加速 GPU 上的动画计算,添加新的实例状态(如 idle、walk、run 等)。
通过 UI 控制动画状态与动画片段的映射,使用有限状态机控制动画流程,实现状态的保存和加载。
碰撞检测入门
介绍碰撞检测的复杂性,避免 naive 方法,利用空间分区(网格、四叉树等)减少计算复杂度。
简化实例以加快碰撞检测,添加四叉树存储模型实例,实现轴对齐 bounding box 和 bounding sphere 用于碰撞检测。
添加行为和交互
构建控制实例行为的结构,添加可视化节点编辑器,集成 imnodes 创建 UI 元素。
创建节点工厂,扩展节点编辑器,实现节点树的保存和加载,添加实例间的交互。
高级动画混合
介绍面部表情动画,加载 morph 网格,将面部动画添加到代码和 GPU 着色器。
实现 additive blending,扩展代码支持 additive 动画,添加头部动画节点,实现相关设置的保存和加载。
第四部分:增强虚拟世界
加载游戏地图
分析地图和模型数据的差异,选择合适的地图文件格式,导入游戏地图。
添加 C++ 类存储关卡数据,扩展 UI 控制关卡属性,将四叉树转换为八叉树。
高级碰撞检测
增强关卡数据的碰撞检测,添加新的八叉树类型,检测实例与关卡的碰撞。
添加重力使实例保持在地面,实现反向运动学(FABRIK 算法)调整节点位置。
添加简单导航
概述不同的导航方式,重点介绍 A路径查找算法,实现基于 A的导航。
准备网格三角形数据,生成地面三角形,查找路径,添加导航目标,实现实例向目标导航。
创建沉浸式交互世界
添加音效和背景音乐,使用音频库(如 SDL、OpenAL 等)播放音效和音乐。
增强视觉效果,使用基于物理的渲染、添加透明度、天空盒、光影效果等,实现昼夜循环和天气效果。
其他内容
每章末尾提供实践环节和额外资源,帮助读者巩固知识和深入学习。
包含代码示例,可从 GitHub 仓库获取,支持 Windows 和 Linux 系统的编译和运行。
该书全面覆盖了 C++ 游戏动画编程的高级技术,从基础模型加载到复杂的动画融合、碰撞检测和导航,适合有一定基础的游戏开发者深入学习。