void SkeletonBlendedGeometry::calculateJointTransform(void) { //Precalculate the matrix for each joint Matrix m; for(UInt32 i(0) ; i<getNumJoints() ; ++i) { m.setValue(getBindTransformation()); m.multLeft(getInternalJointInvBindTransformations(i)); m.multLeft(getJoint(i)->getToWorld()); if( m != _JointPoseTransforms[i]) { _JointPoseTransforms[i].setValue(m); _NeedRecalc = true; } } }
Matrix SkeletonBlendedGeometry::getBindTransformationDiff(UInt32 index) const { Matrix Result(getInternalJointInvBindTransformations(index)); Result.multLeft(dynamic_cast<Node*>(getJoint(index)->getParents()[0])->getToWorld()); return Result; }
Matrix SkeletonBlendedGeometry::getAbsoluteBindTransformation(UInt32 index) const { Matrix Result(getInternalJointInvBindTransformations(index)); Result.invert(); return Result; }