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();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值