Cached skinning matrix
Former-commit-id: c5aeb09778f5696906eb764f600c4a152ab7ba48
This commit is contained in:
parent
5310c8b0d6
commit
774df28d87
|
|
@ -21,18 +21,26 @@ class NAZARA_API NzJoint : public NzNode
|
||||||
NzJoint(const NzJoint& joint);
|
NzJoint(const NzJoint& joint);
|
||||||
~NzJoint() = default;
|
~NzJoint() = default;
|
||||||
|
|
||||||
NzMatrix4f GetInverseBindMatrix() const;
|
void EnsureSkinningMatrixUpdate() const;
|
||||||
|
|
||||||
|
const NzMatrix4f& GetInverseBindMatrix() const;
|
||||||
NzString GetName() const;
|
NzString GetName() const;
|
||||||
NzSkeleton* GetSkeleton();
|
NzSkeleton* GetSkeleton();
|
||||||
const NzSkeleton* GetSkeleton() const;
|
const NzSkeleton* GetSkeleton() const;
|
||||||
|
const NzMatrix4f& GetSkinningMatrix() const;
|
||||||
|
|
||||||
void SetInverseBindMatrix(const NzMatrix4f& matrix);
|
void SetInverseBindMatrix(const NzMatrix4f& matrix);
|
||||||
void SetName(const NzString& name);
|
void SetName(const NzString& name);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void InvalidateNode();
|
||||||
|
void UpdateSkinningMatrix() const;
|
||||||
|
|
||||||
NzMatrix4f m_inverseBindMatrix;
|
NzMatrix4f m_inverseBindMatrix;
|
||||||
|
mutable NzMatrix4f m_skinningMatrix;
|
||||||
NzString m_name;
|
NzString m_name;
|
||||||
NzSkeleton* m_skeleton;
|
NzSkeleton* m_skeleton;
|
||||||
|
mutable bool m_skinningMatrixUpdated;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NAZARA_JOINT_HPP
|
#endif // NAZARA_JOINT_HPP
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,8 @@
|
||||||
#include <Nazara/Utility/Debug.hpp>
|
#include <Nazara/Utility/Debug.hpp>
|
||||||
|
|
||||||
NzJoint::NzJoint(NzSkeleton* skeleton) :
|
NzJoint::NzJoint(NzSkeleton* skeleton) :
|
||||||
m_skeleton(skeleton)
|
m_skeleton(skeleton),
|
||||||
|
m_skinningMatrixUpdated(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -15,11 +16,18 @@ NzJoint::NzJoint(const NzJoint& joint) :
|
||||||
NzNode(joint),
|
NzNode(joint),
|
||||||
m_inverseBindMatrix(joint.m_inverseBindMatrix),
|
m_inverseBindMatrix(joint.m_inverseBindMatrix),
|
||||||
m_name(joint.m_name),
|
m_name(joint.m_name),
|
||||||
m_skeleton(joint.m_skeleton)
|
m_skeleton(joint.m_skeleton),
|
||||||
|
m_skinningMatrixUpdated(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
NzMatrix4f NzJoint::GetInverseBindMatrix() const
|
void NzJoint::EnsureSkinningMatrixUpdate() const
|
||||||
|
{
|
||||||
|
if (!m_skinningMatrixUpdated)
|
||||||
|
UpdateSkinningMatrix();
|
||||||
|
}
|
||||||
|
|
||||||
|
const NzMatrix4f& NzJoint::GetInverseBindMatrix() const
|
||||||
{
|
{
|
||||||
return m_inverseBindMatrix;
|
return m_inverseBindMatrix;
|
||||||
}
|
}
|
||||||
|
|
@ -39,9 +47,18 @@ const NzSkeleton* NzJoint::GetSkeleton() const
|
||||||
return m_skeleton;
|
return m_skeleton;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const NzMatrix4f& NzJoint::GetSkinningMatrix() const
|
||||||
|
{
|
||||||
|
if (!m_skinningMatrixUpdated)
|
||||||
|
UpdateSkinningMatrix();
|
||||||
|
|
||||||
|
return m_skinningMatrix;
|
||||||
|
}
|
||||||
|
|
||||||
void NzJoint::SetInverseBindMatrix(const NzMatrix4f& matrix)
|
void NzJoint::SetInverseBindMatrix(const NzMatrix4f& matrix)
|
||||||
{
|
{
|
||||||
m_inverseBindMatrix = matrix;
|
m_inverseBindMatrix = matrix;
|
||||||
|
m_skinningMatrixUpdated = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NzJoint::SetName(const NzString& name)
|
void NzJoint::SetName(const NzString& name)
|
||||||
|
|
@ -50,3 +67,20 @@ void NzJoint::SetName(const NzString& name)
|
||||||
|
|
||||||
m_skeleton->InvalidateJointMap();
|
m_skeleton->InvalidateJointMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NzJoint::InvalidateNode()
|
||||||
|
{
|
||||||
|
NzNode::InvalidateNode();
|
||||||
|
|
||||||
|
m_skinningMatrixUpdated = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NzJoint::UpdateSkinningMatrix() const
|
||||||
|
{
|
||||||
|
if (!m_transformMatrixUpdated)
|
||||||
|
UpdateTransformMatrix();
|
||||||
|
|
||||||
|
m_skinningMatrix.Set(m_inverseBindMatrix);
|
||||||
|
m_skinningMatrix.ConcatenateAffine(m_transformMatrix);
|
||||||
|
m_skinningMatrixUpdated = true;
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue