简单路径动画:
简单的路径动画不一定需要osgAnimation中丰富多彩的插值与关键帧采样机制,用户只需要输入某个对象节点在每个时刻的关键路径点、包括位置、旋转、缩放,就足以表达复杂的缸体动画形态了。AnimationPath即是满足该需求的类。
类图说明:
以下是osg该功能大概类图。
简单需求样例:
平移并且旋转的牛
代码使用示范:
/*
* 鹰击长空 2016/08/14
* 简单刚体路径动画
*/
osg::Node* createAnimationPathNode()
{
osg::Node* pNode = osgDB::readNodeFile("cow.osg");
//创建动画路径
osg::ref_ptr<osg::AnimationPath> pAnimationPath = new osg::AnimationPath;
pAnimationPath->setLoopMode(osg::AnimationPath::LOOP);
pAnimationPath->insert(0.0, osg::AnimationPath::ControlPoint(osg::Vec3(0.0, 0.0, 0.0),
osg::Quat(0.0, osg::X_AXIS, 0.0, osg::Y_AXIS, 0.0, osg::Z_AXIS)));
pAnimationPath->insert(2.0, osg::AnimationPath::ControlPoint(osg::Vec3(5.0, 0.0, 0.0),
osg::Quat(osg::PI, osg::X_AXIS, 0.0, osg::Y_AXIS, 0.0, osg::Z_AXIS)));
pAnimationPath->insert(4.0, osg::AnimationPath::ControlPoint(osg::Vec3(10.0, 0.0, 0.0),
osg::Quat(0.0, osg::X_AXIS, osg::PI, osg::Y_AXIS, 0.0, osg::Z_AXIS)));
pAnimationPath->insert(6.0, osg::AnimationPath::ControlPoint(osg::Vec3(15.0, 0.0, 0.0),
osg::Quat(0.0, osg::X_AXIS, 0.0, osg::Y_AXIS, osg::PI, osg::Z_AXIS)));
pAnimationPath->insert(8.0, osg::AnimationPath::ControlPoint(osg::Vec3(0.0, 0.0, 0.0),
osg::Quat(0.0, osg::X_AXIS, 0.0, osg::Y_AXIS, 0.0, osg::Z_AXIS)));
//创建更新动画回调
osg::ref_ptr<osg::MatrixTransform> pMatrixTransform = new osg::MatrixTransform;
pMatrixTransform->addChild(pNode);
pMatrixTransform->setUpdateCallback(new osg::AnimationPathCallback(pAnimationPath.get()));
return pMatrixTransform.release();
}