Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public List<Matrix> slerpBetweenFrames(AnimationFrame frame1, AnimationFrame frame2, List<Matrix> jointUnbindMatrices,
- float inter, int numJoints) {
- // Currently does not take joint scaling into account because I did not have to worry about that while building the MD5anim
- // loader, but I doubt that is the cause here.
- List<Matrix> results = new ArrayList<>(numJoints);
- for(int i = 0;i < numJoints;i++) {
- var joint1 = frame1.joints.get(i);
- var joint2 = frame2.joints.get(i);
- var int_pos = joint1.pos.add(joint2.pos.sub(joint1.pos).scalarMul(inter));
- var int_orient = Quaternion.slerp(joint1.orient, joint2.orient, inter);
- var localMat = int_orient.getRotationMatrix().addColumn(int_pos).addRow(new Vector(0,0,0,1));
- Matrix jointMat;
- if(jointUnbindMatrices != null) {
- jointMat = localMat.matMul(jointUnbindMatrices.get(i));
- }
- else {
- jointMat = localMat;
- }
- results.add(jointMat);
- // results.add(Matrix.getIdentityMatrix(4));
- }
- return results;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement