简单路径动画:
简单的路径动画不一定需要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(); }