package com.jme3.scene.plugins.fbx.objects;
import java.util.HashMap;
import java.util.Map;
import com.jme3.math.Matrix4f;
import com.jme3.math.Vector3f;
import com.jme3.scene.plugins.fbx.SceneLoader;
import com.jme3.scene.plugins.fbx.file.FbxElement;
public class FbxBindPose extends FbxObject {
public Map<Long, Matrix4f> nodeTransforms = new HashMap<>();
public FbxBindPose(SceneLoader scene, FbxElement element) {
super(scene, element);
if(type.equals("BindPose")) {
for(FbxElement e : element.children) {
if(e.id.equals("PoseNode")) {
long nodeId = 0;
double[] transform = null;
for(FbxElement e2 : e.children) {
switch(e2.id) {
case "Node":
nodeId = (Long) e2.properties.get(0);
break;
case "Matrix":
transform = (double[]) e2.properties.get(0);
break;
}
}
Matrix4f t = buildTransform(transform);
t.scale(new Vector3f(scene.unitSize, scene.unitSize, scene.unitSize));
nodeTransforms.put(nodeId, t);
}
}
}
}
public void fillBindTransforms() {
for(long nodeId : nodeTransforms.keySet()) {
FbxNode node = scene.modelMap.get(nodeId);
node.bindTransform = nodeTransforms.get(nodeId).clone();
}
}
private static Matrix4f buildTransform(double[] transform) {
float[] m = new float[transform.length];
for(int i = 0; i < transform.length; ++i)
m[i] = (float) transform[i];
Matrix4f matrix = new Matrix4f();
matrix.set(m, false);
return matrix;
}
}