查看: 873|回复: 2

关于osg::AnimationPath

[复制链接]

该用户从未签到

发表于 2014-7-2 10:13:53 | 显示全部楼层 |阅读模式
本帖最后由 wwwanghao 于 2014-7-2 10:13 编辑

采用下面的方式创建一条路径,用于控制物体的运动,但是实际运行结果并不是想象的那样,都说路径是由时间、位置和姿态角控制,
path->insert(time,osg::AnimationPath::ControlPoint(postion,rotation));
那么我的疑问有:
1.这里的time,是相对于什么的时间,是实际的时间,比如单位是秒,还是什么时间?
2.position固定以后,按理说物体的运动路径就固定了,改变yaw,roll,pitch只会导致物体的姿态发生变化,为什么我改变姿态后发现运动路径都会变?
3.这里的姿态应该指的是物体自身坐标系下的参数吧。
  1. ref_ptr<osg::AnimationPath> createAnimatePath(Vec3 & center,float radius,float looptime)
  2. {
  3.         ref_ptr<osg::AnimationPath> path= new osg::AnimationPath;
  4.         path->setLoopMode(osg::AnimationPath::LOOP);
  5.         //number of key points
  6.         int numPoint=60;
  7.     //rotate angle
  8.         float yaw =0.f;
  9.         //step angle
  10.         float yaw_delta=2*osg::PI/(numPoint-1);
  11.         //倾斜角//
  12.         float roll=osg::inDegrees(45.f);
  13.         //the total run time
  14.         float time =0.f;
  15.         //delta time
  16.         float time_delta=looptime/(numPoint);

  17.         for (int i=0;i<numPoint;i++)
  18.         {
  19.                 Vec3 postion(center + Vec3(cosf(yaw)*radius,sinf(yaw)*radius,0));
  20.                 // key point angle
  21.                 //osg::Quat rotation( osg::Quat(roll,osg::Vec3(0,1,0))  *  osg::Quat(  -yaw+osg::inDegrees(90.f),Vec3(0,0,1)  )   );
  22.                 osg::Quat rotation( yaw,Vec3(0,1,0));
  23.                 path->insert(time,osg::AnimationPath::ControlPoint(postion,rotation));
  24.                 time += time_delta;
  25.                 yaw += yaw_delta;
  26.         }
  27.         std::ofstream fout("path100.path");
  28.         path->write(fout);
  29.         fout.close();

  30.         return path;
  31. }
复制代码

osg::Quat rotation( yaw,Vec3(0,0,1));物体在平面上方

osg::Quat rotation( yaw,Vec3(0,0,1));物体在平面上方

osg::Quat rotation( yaw,Vec3(0,1,0));物体运动到平面下面去了

osg::Quat rotation( yaw,Vec3(0,1,0));物体运动到平面下面去了

该用户从未签到

 楼主| 发表于 2014-7-2 10:16:55 | 显示全部楼层
ps: osg很值得吐槽的一点是帮助文档简直就是垃圾,如OpenSceneGraphReferenceDocs-3.0.0,只是一些函数的简单罗列,对函数的介绍,参数说明都没有,学起来感觉很费力,不知道大家都是如何查找一些函数的用法及说明的。

该用户从未签到

 楼主| 发表于 2014-7-2 16:07:46 | 显示全部楼层
原来是,物体起始位置必须设在原点处,osg:uat rotation( yaw,Vec3(0,1,0));的旋转是以原点为中心的,不在中心位置,自然会出错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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