osgAnimation.TemplateSampler
是一个C++模板类,它被用作osgAnimation库中实现插值器插值样本值的一种基本数据结构。
一个插值器(Interpolator)将在时间序列上定义的样本(Samples)转换成另一系列的值,以便对值进行逐步动画(Animation)。
osgAnimation库提供了多种插值器类型,例如LinearInterpolator、SlerpInterpolator和MultiTrackInterpolator等,以及多种Sample类型,例如FloatArray、Vec3Array和QuatArray等。
TemplateSampler是一种通用的数据结构,可以用来组织和管理这些样本和插值器。
模板参数ValueType
定义了TemplateSampler可以处理的值得类型。ValueType
必须是osg::BoundingBox、 osg::Vec2、 osg::Vec3、 osg::Vec4、 osg::Quat、 osg::Vec4ub、 osg::Vec4us、osg::Vec4ui、 osg::Matrixf, osg::Matrixd这些类型中的一种。
public:
// 返回数据类型.
static const char* className();
// 返回set方法是否可以被调用.
virtual bool supportsSet() const;
// 返回数据类型枚举值.
virtual DataType getDataType() const;
// 获取样本数量.
virtual unsigned int getNumSamples() const;
// 获取样本类型.
virtual Type getType() const;
// 添加一个样本.
virtual void addSample(float time, const ValueType& value);
// 获取指定时间下的样本值.
virtual ValueType getSampleValue(unsigned int index) const;
// 获取指定时间下的插值器值.
virtual ValueType operator()(float time) const;
// 完成数据插值.
virtual void interpolate(float time, ValueType& value) const;
//获取所有数据的序列化数据.
virtual void getInterpolatedData(float time, void* value) const;
#include <osgAnimation/TemplateKeyframeContainer>
#include <osg/Quat>
typedef osgAnimation::TemplateKeyframeContainer<osg::Quat> QuatKeyframeContainer;
QuatKeyframeContainer* quatKeyframeContainer = new QuatKeyframeContainer();
...
// 添加一个样本
float time = 1.0f;
osg::Quat q = ...;
quatKeyframeContainer->addKeyframe(time,q);
// 获取数据
osg::Quat q1;
q1 = (*quatKeyframeContainer)(time);