浏览代码

Fixes attachement node when model ignore transforms

Nehon 7 年之前
父节点
当前提交
824e99c96e

+ 4 - 2
jme3-core/src/main/java/com/jme3/animation/Bone.java

@@ -540,8 +540,10 @@ public final class Bone implements Savable, JmeCloneable {
              * The animated meshes ignore transforms: match the world transform
              * of the attachments node to the bone's transform.
              */
-            Transform combined = new Transform(modelPos, modelRot, modelScale);
-            attachNode.setWorldTransform(combined);
+            attachNode.setLocalTranslation(modelPos);
+            attachNode.setLocalRotation(modelRot);
+            attachNode.setLocalScale(modelScale);
+            attachNode.getLocalTransform().combineWithParent(attachNode.getParent().getWorldTransform().invert());
 
         } else {
             Spatial loopSpatial = targetGeometry;

+ 0 - 47
jme3-core/src/main/java/com/jme3/scene/Spatial.java

@@ -495,53 +495,6 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
         return worldTransform;
     }
 
-    /**
-     * Alter the local transform so that the world transform approximates the
-     * specified value.
-     *
-     * @param world desired world transform (not null, unaffected)
-     * @throws IllegalArgumentException if the spatial ignores transform OR the
-     * parent's world transform isn't invertible
-     */
-    public void setWorldTransform(Transform world) {
-        if (this instanceof Geometry && ((Geometry) this).ignoreTransform) {
-            throw new RuntimeException("spatial ignores transforms");
-        }
-
-        if (parent == null) {
-            /*
-             * special case: for a root spatial, the world transform is
-             * precisely the local transform
-             */
-            setLocalTransform(world);
-            return;
-        }
-
-        Transform parentTransform = parent.getWorldTransform();
-        Vector3f parentScale = parentTransform.getScale();
-        if (parentScale.x == 0f || parentScale.y == 0f || parentScale.z == 0f) {
-            throw new RuntimeException("parent scale isn't invertible");
-        }
-        Quaternion parentInvRotation = parentTransform.getRotation().inverse();
-        if (parentInvRotation == null) {
-            throw new RuntimeException("parent rotation isn't invertible");
-        }
-        /*
-         * Undo the operations of Transform.combineWithParent()
-         */
-        Transform tmpLocal = world.clone();
-        Vector3f translation = tmpLocal.getTranslation();
-        Quaternion rotation = tmpLocal.getRotation();
-        tmpLocal.getScale().divideLocal(parentScale);
-        parentInvRotation.mult(rotation, rotation);
-        Vector3f parentTranslation = parentTransform.getTranslation();
-        translation.subtractLocal(parentTranslation);
-        parentInvRotation.multLocal(translation);
-        translation.divideLocal(parentScale);
-
-        setLocalTransform(tmpLocal);
-    }
-
     /**
      * <code>rotateUpTo</code> is a utility function that alters the
      * local rotation to point the Y axis in the direction given by newUp.