Not I'm not calling setBillBoarding...
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Show posts Menu
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();
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);
}
Page created in 0.033 seconds with 13 queries.