查看: 1437|回复: 1

osgCal的使用

[复制链接]

该用户从未签到

发表于 2009-12-28 12:37:04 | 显示全部楼层 |阅读模式
做了一个场景,用osgCal加了一个骨骼动画,由于模型较大,所以在PAT节点中缩小了,代码如下:

  1. osg::ref_ptr<osg::Node> human=makeModel(coreModel.get(),meshAdder.get(),animNum);
  2.     humanPat->addChild(human);
  3. humanPat->setPosition(osg::Vec3(-5.0,380.0,0.0));
  4. humanPat->setScale(osg::Vec3(0.01,0.01,0.01));
  5. humanPat->setAttitude(osg:uat(osg:I_2,osg::Vec3(0.0,0.0,1.0)));
复制代码
骨骼动画不能光有动作,不移动,所以设置了一个固定路径的动画,这样问题就出来了,前面的PAT中的转向、缩小、移动都没了。

  1. std::string filename("walk.path");
  2. //申请一个输入流
  3. std::ifstream in(filename.c_str ()) ;
  4. //申请一个AnimationPath
  5. osg::AnimationPath* walkPath= new osg::AnimationPath();
  6. //从文件中读入到AnimaitonPath中
  7. walkPath->read(in);
  8. //关闭流
  9. in.close () ;

  10.     //设置角色动画路径
  11.     humanPat->setUpdateCallback(new osg::AnimationPathCallback(walkPath));
复制代码
不知道我这个思路对不对,请指教?

该用户从未签到

发表于 2009-12-28 16:36:41 | 显示全部楼层

  1. osg::ref_ptr<osgsitionAttitudeTransform> pat = new osgsitionAttitudeTransform();
  2.         //设置更新回调
  3.         pat->setUpdateCallback(new osg::AnimationPathCallback(animationPath.get(),0.0f,1.0f));
  4.         pat->addChild(humanPat.get()) ;


复制代码


你需要注意AnimationPathCallback执行的内容,,它的内容变换信息被替代~~所以需要申请一个新的变换节点~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表