查看: 1813|回复: 1

osganimation的一个例子

[复制链接]

该用户从未签到

发表于 2011-5-9 17:43:23 | 显示全部楼层 |阅读模式
学习《OpenSceneGraph三维渲染引擎设计与实践》中骨骼动画一节中的示例代码,能够生成模型,但是没有运动效果,不知道为什么,本人新手,请多指教,谢谢,相关代码如下。

osgAnimation::Bone* createBone(const char* name,const osg::Vec3&trans)
{
......
}

osgAnimation::Channel* createChannel(const char* name,float rad)
{
osg::ref_ptr<osgAnimation:uatSphericalLinearChannel> channel
  =new osgAnimation::QuatSphericalLinearChannel;
channel->setName("quaternion");
channel->setTargetName(name);
osgAnimation::QuatKeyframeContainer* ks =
  channel->getOrCreateSampler()->getOrCreateKeyframeContainer();
ks->push_back(
  osgAnimation::QuatKeyframe(0.0,osg::Quat(0.0,osg::Y_AXIS)));
ks->push_back(
  osgAnimation::QuatKeyframe(8.0,osg::Quat(rad,osg::Y_AXIS)));
return channel.release();
}

int main(int argc,char** argv)
{
osgAnimation::Bone* bone0 = createBone("bone0",osg::Vec3(0.0,0.0,0.0));
osgAnimation::Bone* bone1 = createBone("bone1",osg::Vec3(1.0,0.0,0.0));
osgAnimation::Bone* bone2 = createBone("bone2",osg::Vec3(1.0,1.0,0.0));

osg::ref_ptr<osgAnimation::Skeleton> skelroot =
       new osgAnimation::Skeleton;
skelroot->setDefaultUpdateCallback();
skelroot->addChild(bone0);
bone0->addChild(bone1);
bone1->addChild(bone2);

osg::ref_ptr<osgAnimation::Animation> anim =                      //创建动画对象
  new osgAnimation::Animation;
anim->setPlayMode(osgAnimation::Animation:PONG);
anim->addChannel(createChannel("bone1",osg::PI_2));
anim->addChannel(createChannel("bone2",osg::PI_2));

osg::ref_ptr<osgAnimation::BasicAnimationManager> manager=
  new osgAnimation::BasicAnimationManager;
manager->registerAnimation(anim.get());
manager->playAnimation(anim.get());

osg::ref_ptr<osg::Group> root = new osg::Group;
root->addChild(skelroot.get());
root->setUpdateCallback(manager.get());

该用户从未签到

发表于 2011-5-10 08:55:26 | 显示全部楼层
这个例子在新版本的OSG中已经过时了,您不妨直接参看官方的osganimationskinning例子
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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