查看: 1777|回复: 1

求助FBX模型动画加载错误提示

[复制链接]

该用户从未签到

发表于 2012-11-13 22:05:10 | 显示全部楼层 |阅读模式
  1. An update callback has no name, it means it could link only with "" named Targe
  2. , often an error, discard
复制代码

大家好,本人在加载自己做的FBX模型的时候总是有上面这种提示,网上下载的模型就没有这种提示,但是模型在MotionBuilder里面以及OSG实例osganimationviewer都是可以播放的。本来也不会在意这种这种提示的,但是本人在UpdateCallback更新回调里面添加playAnimation的代码时出现如下异常现象(只是在更新回调的时候播放一次模型动画的简单代码):
  1. 1.正常模型(加载模型时没有上面提示的模型)在更新回调里面能够播放动画;
  2. 2.不正常模型在更新回调里面第一次无法播放动画,而第二次回调以后就能够播放动画了。
  3. 3.使用GUIEventHandler按键响应按J,K分别触发模型动画,正常模型和不正常模型都能播放动画。
复制代码
我搜索谷歌,发现上面这段提示是AnimationUpdateCallbackBase里面的ERROR提示。源码如下
  1. #ifndef OSGANIMATION_ANIMATION_UPDATE_CALLBACK
  2. #define OSGANIMATION_ANIMATION_UPDATE_CALLBACK 1

  3. #include <osg/Object>
  4. #include <osgAnimation/Channel>
  5. #include <osgAnimation/Animation>
  6. #include <string>

  7. namespace osgAnimation
  8. {

  9.     class AnimationUpdateCallbackBase : public virtual osg::Object
  10.     {
  11.     public:
  12.         virtual bool link(Channel* channel) = 0;
  13.         virtual int link(Animation* animation) = 0;
  14.     };


  15.     template <class T>
  16.     class AnimationUpdateCallback : public AnimationUpdateCallbackBase, public T
  17.     {
  18.     public:
  19.         AnimationUpdateCallback() {}
  20.         AnimationUpdateCallback(const std::string& name) { T::setName(name);}
  21.         AnimationUpdateCallback(const AnimationUpdateCallback& apc,const osg::CopyOp& copyop): T(apc, copyop) {}

  22.         META_Object(osgAnimation, AnimationUpdateCallback<T>);

  23.         const std::string& getName() const { return T::getName(); }
  24.         bool link(Channel* channel) { return 0; }
  25.         int link(Animation* animation)
  26.         {
  27.             if (T::getName().empty())
  28.             {
  29.                 osg::notify(osg::WARN) << "An update callback has no name, it means it could link only with "" named Target, often an error, discard" << std::endl;
  30.                 return 0;
  31.             }
  32.             int nbLinks = 0;
  33.             for (ChannelList::iterator it = animation->getChannels().begin();
  34.                  it != animation->getChannels().end();
  35.                  ++it)
  36.             {
  37.                 std::string targetName = (*it)->getTargetName();
  38.                 if (targetName == T::getName())
  39.                 {
  40.                     AnimationUpdateCallbackBase* a = this;
  41.                     a->link((*it).get());
  42.                     nbLinks++;
  43.                 }
  44.             }
  45.             return nbLinks;
  46.         }
  47.     };

  48. }

  49. #endif
复制代码
本人才疏学浅,只知道T是泛型,琢磨不透这T是指什么。希望大家能指导下怎么处理这个问题,模型需要修改哪里呢。亦或者是在代码里面能修补这个问题。烦请大家帮下忙,先谢谢看帖的各位了。

该用户从未签到

发表于 2012-11-14 08:11:45 | 显示全部楼层
UpdateMatrixTransform 中 这个T 是NodeCallback,T的名字就是 channel中 设置的target的name, 不设置name 无法与正确的channel 连接
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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