osgAnimation.MathMotionTemplate是osgAnimation库中的一个类,它通过内插法计算关键帧之间的数学运动。
osgAnimation.MathMotionTemplate的主要目的是计算动画中的插值运动。该类是osgAnimation.Animation中运动实现的抽象基础类。
osgAnimation.MathMotionTemplate是osgAnimation.Animation中的运动实现基础类。而osgAnimation.Animation又是osgAnimation.AnimationManagerBase的子类。因此,创建一个osgAnimation.Animation,并将关键帧传输到该对象中,然后将其添加到osgAnimation.AnimationManagerBase即可实现动画。
// 创建关键帧列表
osgAnimation::Vec3KeyframeContainer* positionKeys =
new osgAnimation::Vec3KeyframeContainer;
positionKeys->push_back(osgAnimation::Vec3Keyframe(0, osg::Vec3(0,0,0)));
positionKeys->push_back(osgAnimation::Vec3Keyframe(3, osg::Vec3(10,0,0)));
// 创建MathMotionTemplate
osg::ref_ptr<osgAnimation::MathMotionTemplate<osgAnimation::Vec3KeyframeContainer, osg::Vec3f> > positionMotion =
new osgAnimation::MathMotionTemplate<osgAnimation::Vec3KeyframeContainer, osg::Vec3f>;
positionMotion->setKeyframeContainer(positionKeys);
// 创建动画
osg::ref_ptr<osgAnimation::Animation> animation =
new osgAnimation::Animation;
animation->setPlayMode(osgAnimation::Animation::LOOP);
animation->addChannel(positionMotion);
// 创建动画管理器
osg::ref_ptr<osgAnimation::AnimationManagerBase> manager =
osgAnimation::AnimationManagerBase::create();
// 添加动画
manager->registerAnimation(animation);
// 使相机移动
osg::ref_ptr<osgAnimation::UpdateMatrixTransform> updateMT =
new osgAnimation::UpdateMatrixTransform("MT", manager.get());
updateMT->addChild(camera->getSceneData());
root->addChild(updateMT.get());
osgAnimation.MathMotionTemplate是osgAnimation.Motion接口的模板实现。模板的模板参数Container必须是osgAnimation.KeyframeContainer的一种有效子类,而Value必须是实现了算术运算的类型。该模板使用正弦插值法在关键帧之间计算值。