71 lines
1.9 KiB
C++
71 lines
1.9 KiB
C++
/**
|
|
* Copyright (c) 2014-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
|
|
#include "AnimationData.h"
|
|
|
|
#include <utility>
|
|
|
|
#include "AccessorData.h"
|
|
#include "NodeData.h"
|
|
|
|
AnimationData::AnimationData(std::string name, const AccessorData &timeAccessor)
|
|
: Holdable(),
|
|
name(std::move(name)),
|
|
timeAccessor(timeAccessor.ix) {}
|
|
|
|
// assumption: 1-to-1 relationship between channels and samplers; this is a simplification on what
|
|
// glTF can express, but it means we can rely on samplerIx == channelIx throughout an animation
|
|
void AnimationData::AddNodeChannel(const NodeData &node, const AccessorData &accessor, std::string path)
|
|
{
|
|
assert(channels.size() == samplers.size());
|
|
uint32_t ix = channels.size();
|
|
channels.emplace_back(channel_t(ix, node, std::move(path)));
|
|
samplers.emplace_back(sampler_t(timeAccessor, accessor.ix));
|
|
}
|
|
|
|
json AnimationData::serialize() const
|
|
{
|
|
return {
|
|
{ "name", name },
|
|
{ "channels", channels },
|
|
{ "samplers", samplers }
|
|
};
|
|
}
|
|
|
|
AnimationData::channel_t::channel_t(uint32_t ix, const NodeData &node, std::string path)
|
|
: ix(ix),
|
|
node(node.ix),
|
|
path(std::move(path))
|
|
{
|
|
}
|
|
|
|
AnimationData::sampler_t::sampler_t(uint32_t time, uint32_t output)
|
|
: time(time),
|
|
output(output)
|
|
{
|
|
}
|
|
|
|
void to_json(json &j, const AnimationData::channel_t &data) {
|
|
j = json {
|
|
{ "sampler", data.ix },
|
|
{ "target", {
|
|
{ "node", data.node },
|
|
{ "path", data.path }},
|
|
}
|
|
};
|
|
}
|
|
|
|
void to_json(json &j, const AnimationData::sampler_t &data) {
|
|
j = json {
|
|
{ "input", data.time },
|
|
{ "interpolation", "LINEAR" },
|
|
{ "output", data.output },
|
|
};
|
|
}
|