Ok thanks....well finally I have created a reduced version of my model with 15 joints....the problem is still the same....I can see the movement of the skeleton within the skeletonDebugger but the meshes dont update... the code is the following::
SkeletonHelper skeletonHelper=new SkeletonHelper(human);
Joint j=skeletonHelper.getJoint("Bone.003");;
totalRad= (float) (totalRad+rad);
targetJoint(skeletonHelper.pose, j.getIndex(), new SimpleVector(1, 0, 0), new SimpleVector(0, 0, totalRad), totalRad);
skeletonHelper.pose.updateTransforms();
skeletonDebugger.update(skeletonHelper.pose);
human.applySkeletonPose();
human.applyAnimation();
Being targetJoint the method is took from one of the sample's bones:
private void targetJoint(SkeletonPose pose, int jointIndex, SimpleVector bindPoseDirection,
SimpleVector targetPos, final float targetStrength) {
final int parentIndex = pose.getSkeleton().getJoint(jointIndex).getParentIndex();
// neckBindGlobalTransform is the neck bone -> model space transform. essentially, it is the world transform of
// the neck bone in bind pose.
final Matrix jointInverseBindPose = pose.getSkeleton().getJoint(jointIndex).getInverseBindPose();
final Matrix jointBindPose = jointInverseBindPose.invert();
// Get a vector representing forward direction in neck space, use inverse to take from world -> neck space.
SimpleVector forwardDirection = new SimpleVector(bindPoseDirection);
forwardDirection.rotate(jointInverseBindPose);
// Get a vector representing a direction to target point in neck space.
SimpleVector targetDirection = targetPos.calcSub(pose.getGlobal(jointIndex).getTranslation()).normalize();
targetDirection.rotate(jointInverseBindPose);
// Calculate a rotation to go from one direction to the other and set that rotation on a blank transform.
Quaternion quat = new Quaternion();
quat.fromVectorToVector(forwardDirection, targetDirection);
quat.slerp(Quaternion.IDENTITY, quat, targetStrength);
final Matrix subGlobal = quat.getRotationMatrix();
// now remove the global/world transform of the neck's parent bone, leaving us with just the local transform of
// neck + rotation.
subGlobal.matMul(jointBindPose);
subGlobal.matMul(pose.getSkeleton().getJoint(parentIndex).getInverseBindPose());
// set that as the neck's transform
pose.getLocal(jointIndex).setTo(subGlobal);
}
What am I doing wrong? :S