0.0.3 |
|
---|---|
0.0.1 |
|
#10 in #玛瑙
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
。
示例
依赖项
约22MB
约394K SLoC