Skeleton update fix

pull/638/head
scrawl 10 years ago
parent bd88758962
commit 9246a668b9

@ -135,7 +135,7 @@ void RigGeometry::update(osg::NodeVisitor* nv)
return;
}
mSkeleton->updateBoneMatrices();
mSkeleton->updateBoneMatrices(nv);
osg::NodePath path;
bool foundSkel = false;

@ -34,6 +34,7 @@ private:
Skeleton::Skeleton()
: mBoneCacheInit(false)
, mNeedToUpdateBoneMatrices(true)
, mLastFrameNumber(0)
{
}
@ -42,6 +43,7 @@ Skeleton::Skeleton(const Skeleton &copy, const osg::CopyOp &copyop)
: osg::Group(copy, copyop)
, mBoneCacheInit(false)
, mNeedToUpdateBoneMatrices(true)
, mLastFrameNumber(0)
{
}
@ -100,11 +102,15 @@ Bone* Skeleton::getBone(const std::string &name)
return bone;
}
void Skeleton::updateBoneMatrices()
void Skeleton::updateBoneMatrices(osg::NodeVisitor* nv)
{
//if (mNeedToUpdateBoneMatrices)
{
if (nv->getFrameStamp()->getFrameNumber() != mLastFrameNumber)
mNeedToUpdateBoneMatrices = true;
mLastFrameNumber = nv->getFrameStamp()->getFrameNumber();
if (mNeedToUpdateBoneMatrices)
{
if (mRootBone.get())
{
for (unsigned int i=0; i<mRootBone->mChildren.size(); ++i)

@ -39,7 +39,7 @@ namespace NifOsg
META_Node(NifOsg, Skeleton)
void updateBoneMatrices();
void updateBoneMatrices(osg::NodeVisitor* nv);
private:
// The root bone is not a "real" bone, it has no corresponding node in the scene graph.
@ -51,6 +51,8 @@ namespace NifOsg
bool mBoneCacheInit;
bool mNeedToUpdateBoneMatrices;
unsigned int mLastFrameNumber;
};
}

Loading…
Cancel
Save