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

Download history 924/week @ 2024-03-13 1285/week @ 2024-03-20 1270/week @ 2024-03-27 1030/week @ 2024-04-03 984/week @ 2024-04-10 1209/week @ 2024-04-17 1288/week @ 2024-04-24 1062/week @ 2024-05-01 1091/week @ 2024-05-08 1048/week @ 2024-05-15 1119/week @ 2024-05-22 1235/week @ 2024-05-29 944/week @ 2024-06-05 782/week @ 2024-06-12 1005/week @ 2024-06-19 791/week @ 2024-06-26

3,722 每月下载量
10 个Crate中使用 10 (直接使用 2

MIT/Apache

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

示例

animationgltf示例演示了此crate的用法。

依赖

35–49MB~
~708K SLoC