public static Matrix4f getParentTransforms(Node node, int framePos) { if (node == null) { return new Matrix4f(); } else { Matrix4f parentTransform = new Matrix4f(getParentTransforms(node.getParent(), framePos)); List<Matrix4f> transformations = node.getTransformations(); Matrix4f nodeTransform; int transfSize = transformations.size(); if (framePos < transfSize) { nodeTransform = transformations.get(framePos); } else if ( transfSize > 0 ) { nodeTransform = transformations.get(transfSize - 1); } else { nodeTransform = new Matrix4f(); } return parentTransform.mul(nodeTransform); } }
public static Matrix4f getParentTransforms(Node node, int framePos) { if (node == null) { return new Matrix4f(); } else { Matrix4f parentTransform = new Matrix4f(getParentTransforms(node.getParent(), framePos)); List<Matrix4f> transformations = node.getTransformations(); Matrix4f nodeTransform; int transfSize = transformations.size(); if (framePos < transfSize) { nodeTransform = transformations.get(framePos); } else if ( transfSize > 0 ) { nodeTransform = transformations.get(transfSize - 1); } else { nodeTransform = new Matrix4f(); } return parentTransform.mul(nodeTransform); } }
private static List<AnimatedFrame> buildAnimationFrames(List<Bone> boneList, Node rootNode, Matrix4f rootTransformation) { int numFrames = rootNode.getAnimationFrames(); List<AnimatedFrame> frameList = new ArrayList<>(); for (int i = 0; i < numFrames; i++) { AnimatedFrame frame = new AnimatedFrame(); frameList.add(frame); int numBones = boneList.size(); for (int j = 0; j < numBones; j++) { Bone bone = boneList.get(j); Node node = rootNode.findByName(bone.getBoneName()); Matrix4f boneMatrix = Node.getParentTransforms(node, i); boneMatrix.mul(bone.getOffsetMatrix()); boneMatrix = new Matrix4f(rootTransformation).mul(boneMatrix); frame.setMatrix(j, boneMatrix); } } return frameList; }
private static List<AnimatedFrame> buildAnimationFrames(List<Bone> boneList, Node rootNode, Matrix4f rootTransformation) { int numFrames = rootNode.getAnimationFrames(); List<AnimatedFrame> frameList = new ArrayList<>(); for (int i = 0; i < numFrames; i++) { AnimatedFrame frame = new AnimatedFrame(); frameList.add(frame); int numBones = boneList.size(); for (int j = 0; j < numBones; j++) { Bone bone = boneList.get(j); Node node = rootNode.findByName(bone.getBoneName()); Matrix4f boneMatrix = Node.getParentTransforms(node, i); boneMatrix.mul(bone.getOffsetMatrix()); boneMatrix = new Matrix4f(rootTransformation).mul(boneMatrix); frame.setMatrix(j, boneMatrix); } } return frameList; }