|
@@ -7,11 +7,9 @@ import java.util.Map;
|
|
|
import com.jme3.animation.Bone;
|
|
|
import com.jme3.math.Matrix4f;
|
|
|
import com.jme3.math.Quaternion;
|
|
|
-import com.jme3.math.Transform;
|
|
|
import com.jme3.math.Vector3f;
|
|
|
import com.jme3.scene.plugins.blender.BlenderContext;
|
|
|
import com.jme3.scene.plugins.blender.exceptions.BlenderFileException;
|
|
|
-import com.jme3.scene.plugins.blender.file.DynamicArray;
|
|
|
import com.jme3.scene.plugins.blender.file.Structure;
|
|
|
import com.jme3.scene.plugins.blender.objects.ObjectHelper;
|
|
|
|
|
@@ -25,8 +23,6 @@ public class BoneContext {
|
|
|
private Long armatureObjectOMA;
|
|
|
/** The structure of the bone. */
|
|
|
private Structure boneStructure;
|
|
|
- /** Bone's pose channel structure. */
|
|
|
- private Structure poseChannel;
|
|
|
/** Bone's name. */
|
|
|
private String boneName;
|
|
|
/** This variable indicates if the Y axis should be the UP axis. */
|
|
@@ -39,8 +35,6 @@ public class BoneContext {
|
|
|
private List<BoneContext> children = new ArrayList<BoneContext>();
|
|
|
/** Created bone (available after calling 'buildBone' method). */
|
|
|
private Bone bone;
|
|
|
- /** Bone's pose transform (available after calling 'buildBone' method). */
|
|
|
- private Transform poseTransform = new Transform();
|
|
|
/** The bone's rest matrix. */
|
|
|
private Matrix4f restMatrix;
|
|
|
/** Bone's total inverse transformation. */
|
|
@@ -106,8 +100,6 @@ public class BoneContext {
|
|
|
this.children.add(new BoneContext(child, armatureObjectOMA, this, objectToArmatureMatrix, bonesPoseChannels, blenderContext));
|
|
|
}
|
|
|
|
|
|
- poseChannel = bonesPoseChannels.get(boneStructure.getOldMemoryAddress());
|
|
|
-
|
|
|
blenderContext.setBoneContext(boneStructure.getOldMemoryAddress(), this);
|
|
|
}
|
|
|
|
|
@@ -136,33 +128,6 @@ public class BoneContext {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * This method computes the pose transform for the bone.
|
|
|
- */
|
|
|
- @SuppressWarnings("unchecked")
|
|
|
- private void computePoseTransform() {
|
|
|
- DynamicArray<Number> loc = (DynamicArray<Number>) poseChannel.getFieldValue("loc");
|
|
|
- DynamicArray<Number> size = (DynamicArray<Number>) poseChannel.getFieldValue("size");
|
|
|
- DynamicArray<Number> quat = (DynamicArray<Number>) poseChannel.getFieldValue("quat");
|
|
|
- if (fixUpAxis) {
|
|
|
- poseTransform.setTranslation(loc.get(0).floatValue(), -loc.get(2).floatValue(), loc.get(1).floatValue());
|
|
|
- poseTransform.setRotation(new Quaternion(quat.get(1).floatValue(), quat.get(3).floatValue(), -quat.get(2).floatValue(), quat.get(0).floatValue()));
|
|
|
- poseTransform.setScale(size.get(0).floatValue(), size.get(2).floatValue(), size.get(1).floatValue());
|
|
|
- } else {
|
|
|
- poseTransform.setTranslation(loc.get(0).floatValue(), loc.get(1).floatValue(), loc.get(2).floatValue());
|
|
|
- poseTransform.setRotation(new Quaternion(quat.get(0).floatValue(), quat.get(1).floatValue(), quat.get(2).floatValue(), quat.get(3).floatValue()));
|
|
|
- poseTransform.setScale(size.get(0).floatValue(), size.get(1).floatValue(), size.get(2).floatValue());
|
|
|
- }
|
|
|
-
|
|
|
- Transform localTransform = new Transform(bone.getLocalPosition(), bone.getLocalRotation());
|
|
|
- localTransform.setScale(bone.getLocalScale());
|
|
|
- localTransform.getTranslation().addLocal(poseTransform.getTranslation());
|
|
|
- localTransform.getRotation().multLocal(poseTransform.getRotation());
|
|
|
- localTransform.getScale().multLocal(poseTransform.getScale());
|
|
|
-
|
|
|
- poseTransform.set(localTransform);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* This method builds the bone. It recursively builds the bone's children.
|
|
|
*
|
|
@@ -193,18 +158,9 @@ public class BoneContext {
|
|
|
bone.addChild(child.buildBone(bones, boneOMAs, blenderContext));
|
|
|
}
|
|
|
|
|
|
- this.computePoseTransform();
|
|
|
-
|
|
|
return bone;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * @return bone's pose transformation
|
|
|
- */
|
|
|
- public Transform getPoseTransform() {
|
|
|
- return poseTransform;
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* @return built bone (available after calling 'buildBone' method)
|
|
|
*/
|