#玛瑙 #智能家居自动化 #智能家居 #SDK #自动化引擎

已删除 玛瑙动画

为玛瑙提供的动画支持

0.0.3 2019年9月1日
0.0.1 2019年9月1日

#10 in #玛瑙


3 个 crate 中使用 (2 直接使用)

MIT/Apache

740KB
17K SLoC

该 crate 被玛瑙自动化引擎用于动画。


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) (概念上——在代码中,元组持有引用而不是完整的对象)。因此,每个节点都持有有关采样器属于哪个通道以及它应用于哪个实体的信息。

那么对于只有一个实体的节点会发生什么?目前,Sardonyx 要求您将其节点索引分配为 0

示例

示例代码 animationgltf 展示了此crate的用法。

依赖项

约22MB
约394K SLoC