osgAnimation.StackedTranslateElement是OpenSceneGraph的osgAnimation库中的一个类,用于表示平移动画的关键帧数据。该类继承自osgAnimation.StackedTransformElement类,是其中的一种特例。
osgAnimation.StackedTranslateElement用于储存平移动画的关键帧数据,可以通过设置不同时间点的平移向量来描述物体在动画过程中的位置变化。
使用该类需要包含头文件<osgAnimation/StackedTranslateElement>
StackedTranslateElement() {}
StackedTypes getStackedType() const
返回Stacked类型,对于StackedTranslateElement,返回TRANSLATE
。
virtual bool init(const osgAnimation::Animation& animation)
从指定动画中初始化当前实例。若当前实例已包含动画数据,则返回false,否则返回true。
virtual void write(osg::Object& obj, osg::OutputStream& to) const
将当前实例数据写入输出流。
virtual void read(osg::Object& obj, osg::InputStream& from)
读取输入流中的数据,并更新当前实例。
virtual void update(osgAnimation::Animation& animation) const
在指定动画中更新当前实例的数据。
void push_back(const double time, const osg::Vec3& value)
将指定时间点的平移向量添加到当前实例的关键帧数据中。
osg::Vec3 getTranslationAt(double time) const
获取在指定时间点的平移向量。
void apply(double weight, osg::Vec3& translation) const
计算实例的单位矩阵与动画权重的加权平均值,得到对象的最终平移向量。返回结果保存在参数translation
中。
#include <osg/MatrixTransform>
#include <osgAnimation/Animation>
#include <osgAnimation/StackedTranslateElement>
osg::ref_ptr<osgAnimation::StackedTransform> stackedTranslate = new osgAnimation::StackedTransform;
osg::ref_ptr<osgAnimation::StackedTranslateElement> translation = new osgAnimation::StackedTranslateElement;
translation->push_back(0.0, osg::Vec3(0, 0, 0)); // 初始化平移关键帧
translation->push_back(1.0, osg::Vec3(10, 0, 0));
translation->push_back(2.0, osg::Vec3(10, 10, 0));
translation->push_back(3.0, osg::Vec3(0, 10, 0));
stackedTranslate->push_back(translation);
osg::ref_ptr<osg::MatrixTransform> mt = new osg::MatrixTransform;
mt->setMatrix(osg::Matrix::translate(osg::Vec3(-5, 0, 0))); // 初始化位置
mt->setDataVariance(osg::Object::DYNAMIC);
mt->setUpdateCallback(new osgAnimation::UpdateMatrixTransform(stackedTranslate.get()));