本文主要是介绍OSG-场景动画基础知识_刚体动画,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简单路径动画:
简单的路径动画不一定需要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();
}
这篇关于OSG-场景动画基础知识_刚体动画的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!