OSG中显示模型自带的动画

假如三维模型自带动画,在OSG中,只需要得到模型的动画列表,然后从中选择一个动画,进行播放就可以了。而模型的动画列表,通常存放在UpdateCallBack中。


#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
#include <osgAnimation/BasicAnimationManager>

int main(int argc, char* argv[])
{
	osgViewer::Viewer viewer;

	//读取带动画的节点
	osg::Node *animationNode = osgDB::readNodeFile("nathan.osg");
	//获得节点的动画列表
	osgAnimation::BasicAnimationManager* anim =
		dynamic_cast<osgAnimation::BasicAnimationManager*>(animationNode->getUpdateCallback());
	const osgAnimation::AnimationList& list = anim->getAnimationList();
	//从动画列表中选择一个动画,播放
	anim->playAnimation(list[0].get());

	viewer.setSceneData(animationNode);
	return viewer.run();
}


这里有一个主要的类, BasicAnimationManager,这个类用来对动画进行管理,它里面保存了动画列表,还提供函数来对动画进行播放。


BasicAnimationManager提供函数,播放动画。 而其父类,AnimationManagerBase保存了动画列表。而AnimationManagerBase又继承自NodeCallback,NodeCallback正是制作动画时,setAnimationPathCallback的参数类型。


实际使用的时候,根据动画的名称,来从动画列表中选择一个动画。

if( list[i]->getName() == std::string("Idle_Head_Scratch.02") )

{

anim->playAnimation(list[i].get());

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值