osgAnimation.UpdateRigGeometry
是OpenSceneGraph中的动画库osgAnimation的一个类。
这个类是用来更新一个节点的几何信息,以迭代式的方式展示一个“skin-rig”动画。使用这个类,可以使得一个节点的几何形状在运行时动态的改变。
使用时,需要从osgAnimation
命名空间中先引入:
#include <osgAnimation/UpdateRigGeometry>
然后在创建完成一个用来存储“skin-rig”的几何节点之后进行以下操作:
// ...
// Create geometry node for skin-rig
osg::ref_ptr<osg::Geode> geode = new osg::Geode();
geode->addDrawable(...);
// Create skin-rig animation node
osg::ref_ptr<osgAnimation::BoneMap> boneMap = ...;
osg::ref_ptr<osgAnimation::Animation> animation = ...;
osg::ref_ptr<osgAnimation::UpdateBone> updateBone = new osgAnimation::UpdateBone(boneMap);
updateBone->setAnimation(animation);
// Create UpdateRigGeometry node
osg::ref_ptr<osgAnimation::UpdateRigGeometry> updateGeom = new osgAnimation::UpdateRigGeometry();
updateGeom->setBoneMap(boneMap);
updateGeom->setGeometry(geode);
updateGeom->addUpdateCallback(updateBone);
// Attach UpdateRigGeometry node to scene graph
root->addChild(updateGeom);
// ...
上述代码中的geode
节点是存储几何信息的节点,它的创建方式可以根据实际情况进行调整。
boneMap
是一个osgAnimation::BoneMap
对象,它用来描述“skin-rig”动画的骨骼信息,每个骨骼都对应着一个编号。animation
是一个包含动画关键帧信息的osgAnimation::Animation
对象。
updateBone
和updateGeom
都是更新节点,它们分别用来更新骨骼和几何信息。
在设置updateGeom
的时候,需要将boneMap
和geode
设置进去,并将updateBone
加入到updateGeom
中去,这样在程序运行的时候才能正确的更新几何信息。
void setBoneMap(osgAnimation::BoneMap* boneMap)
将一个osgAnimation::BoneMap
对象设置到当前的更新节点上去。
osgAnimation::BoneMap* getBoneMap() const
获取当前更新节点存储的骨骼信息。
void setGeometry(osg::Geode* geode)
将一个osg::Geode
对象设置为当前更新节点的几何形状。
osg::Geode* getGeometry() const
获取当前更新节点存储的几何形状。
void addUpdateCallback(osgAnimation::UpdateBone* updateBone)
将一个osgAnimation::UpdateBone
对象加入到当前更新节点的回调函数中去,用来更新“skin-rig”动画的骨骼信息。
void removeUpdateCallback(osgAnimation::UpdateBone* updateBone)
将一个之前加入到当前更新节点回调函数中的osgAnimation::UpdateBone
对象从中移除。