13个版本 (破坏性更新)
0.15.3 | 2020年8月23日 |
---|---|
0.10.1 | 2020年8月17日 |
0.10.0 | 2020年3月23日 |
0.8.1 | 2019年10月4日 |
0.1.0 | 2017年12月29日 |
#38 in #amethyst
3,722 每月下载量
在 10 个Crate中使用 10 (直接使用 2)
1MB
23K SLoC
此Crate被Amethyst游戏引擎用于动画。
lib.rs
:
提供计算机图形动画功能。
单个实体的动画由一个或多个 Sampler
组成。每个采样器操作一个 Channel
。因此,对于一个单个实体,从概念上讲,每个 (Channel, Sampler)
对可以定义动画的一部分,而一个 Vec<(Channel, Sampler)>
定义整个动画。
在更复杂的情况下,游戏中的对象可能由多个实体组成。比如说,你有一个由10个关节组成的骨骼蒙皮定义的龙怪物。每个关节将是一个 Entity
。我们的动画定义包含运行整个对象的所有采样器。为了给这个复杂对象的每个实体进行动画处理,我们需要一种方法将采样器链接到每个实体。
动画定义是持久的,可以存储在磁盘上。然而,实体不是。为了将正确的采样器链接到正确的实体,当构建每个实体(如关节)时,我们使用索引来跟踪它,称为 node_index
。
以下列表可能有助于说明场景
节点索引 | 实体 |
---|---|
0 | 身体 ("主要"实体) |
1 | 头部 |
2 | 左左 |
3 | 右左 |
... | ... |
节点索引到Entity
的映射存储在AnimationHierarchy
中。
回到动画定义,我们还在元组中记录了node_index
,我们称之为“节点”。每个节点现在是(node_index, Channel, Sampler)
(概念上——在代码中,元组持有引用而不是完整对象)。因此,每个节点都保存了采样器属于哪个通道,以及应该应用于哪个实体。
那么对于只有一个实体的节点会发生什么?目前Amethyst要求您将其节点索引分配为0
。
示例
依赖
35–49MB~
~708K SLoC