查看: 2561|回复: 10

有关osgcal骨骼动画的问题,期待您的指教

[复制链接]

该用户从未签到

发表于 2010-3-15 23:35:16 | 显示全部楼层 |阅读模式
用osgcal做的骨骼动画,怎样才能将两段写在配置文件中的动画文件连在一起播放。小弟使用的是osg::Timer的一个实例来操作时间,但是得到的效果不理想,动画播放不连续,有些帧被跳过了。很是恼火,请大大们赐教。

该用户从未签到

发表于 2010-3-16 01:00:39 | 显示全部楼层
这个比较简单啊,,,两个混合执行就可以了,Blend animation ,Cal3D是支持混合动作的~~~~~~如果你使用osg::Timer操作的话,你得首先知道动画导出的帧,,,同时需要按比例缩小执行的帧,如40%,60%,,这样才能连续~~~~~

该用户从未签到

 楼主| 发表于 2010-3-16 09:52:48 | 显示全部楼层
CAL3D支持混合动作,但是osgcal支持么?支持的话怎么调用?

该用户从未签到

发表于 2010-3-16 15:55:49 | 显示全部楼层
void  blendCycle (int id, float weight, float delay, float timeFactor=1.0f)
  Blend animation cycle to the specified weight in specified time.

该用户从未签到

 楼主| 发表于 2010-3-16 16:02:09 | 显示全部楼层
能否告知mixer的用法?

该用户从未签到

 楼主| 发表于 2010-3-16 16:27:03 | 显示全部楼层
怎么获得每个子动画的准确的起讫时间,我自己设置的老有问题,动作卡卡的

该用户从未签到

发表于 2010-3-16 16:28:16 | 显示全部楼层
你觉得我的回答有问题吗???另外,请你看看osgCal::Model 类吧~~~~~~~


  1. class CAL3D_API CalMixer : public CalAbstractMixer
  2. {
  3. public:
  4.   CalMixer(CalModel* pModel);
  5.   virtual ~CalMixer();

  6.   virtual bool isDefaultMixer() { return true; }
  7.   bool blendCycle(int id, float weight, float delay);
  8.   bool clearCycle(int id, float delay);
  9.   bool executeAction(int id, float delayIn, float delayOut, float weightTarget = 1.0f, bool autoLock=false);
  10.   bool removeAction(int id);
  11.   virtual void updateAnimation(float deltaTime);
  12.   virtual void updateSkeleton();
  13.   float getAnimationTime();
  14.   float getAnimationDuration();
  15.   void setAnimationTime(float animationTime);
  16.   void setTimeFactor(float timeFactor);
  17.   float getTimeFactor();
  18.   CalModel *getCalModel();  
  19.   std::vector<CalAnimation *> &getAnimationVector();
  20.   std::list<CalAnimationAction *> &getAnimationActionList();
  21.   std::list<CalAnimationCycle *> &getAnimationCycle();  
  22.   
  23. protected:
  24.   CalModel *m_pModel;
  25.   std::vector<CalAnimation *> m_vectorAnimation;
  26.   std::list<CalAnimationAction *> m_listAnimationAction;
  27.   std::list<CalAnimationCycle *> m_listAnimationCycle;
  28.   float m_animationTime;
  29.   float m_animationDuration;
  30.   float m_timeFactor;
  31. };

  32. #endif

复制代码

该用户从未签到

 楼主| 发表于 2010-3-16 16:45:45 | 显示全部楼层
void  blendCycle (int id, float weight, float delay, float timeFactor=1.0f)
  Blend animation cycle to the specified weight in specified time.
FlySky 发表于 2010-3-16 15:55



你的意思是在指定的时间到达的时候手动调用blendcycle去更新动作吗?
首先如何把要混合的多个动作整到一起让blendcycle去混合执行呢?

该用户从未签到

 楼主| 发表于 2010-3-16 16:48:49 | 显示全部楼层
7# FlySky


这个是cal3d的类吧,我看过这个了,但是不知道里面的成员比如
std::vector<CalAnimation *> m_vectorAnimation;

std::list<CalAnimationAction *> m_listAnimationAction;
std::list<CalAnimationCycle *> m_listAnimationCycle;
是用来做什么的,m_vectorAnimation是不是用来存放所有要混合的动作的?如果是的话怎么设置它呢?

该用户从未签到

发表于 2010-3-17 00:17:16 | 显示全部楼层
楼主好像是想把几段动画连接起来播放哦,就是说播完第一段紧接着播第二段。
用混合动画不是主要用来同时播几段动画的吗?也可以实现上面这种功能?
小弟是菜鸟,还请各位大侠指教

该用户从未签到

发表于 2011-8-16 18:18:42 | 显示全部楼层
如果是要把一个action做完后连续做下一个action ,该怎么控制?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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