소스 검색

Fixes attachement node when model ignore transforms

Nehon 7 년 전
부모
커밋
824e99c96e
2개의 변경된 파일4개의 추가작업 그리고 49개의 파일을 삭제
  1. 4 2
      jme3-core/src/main/java/com/jme3/animation/Bone.java
  2. 0 47
      jme3-core/src/main/java/com/jme3/scene/Spatial.java

+ 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.