ソースを参照

Bugfix: fixed a bug that caused the 'maintain volume' constraint to be badlu applied on objects.

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@11104 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
Kae..pl 11 年 前
コミット
cc1ebe7b96

+ 19 - 14
engine/src/blender/com/jme3/scene/plugins/blender/constraints/definitions/ConstraintDefinitionMaintainVolume.java

@@ -1,5 +1,6 @@
 package com.jme3.scene.plugins.blender.constraints.definitions;
 
+import com.jme3.animation.Bone;
 import com.jme3.math.Transform;
 import com.jme3.scene.plugins.blender.BlenderContext;
 import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
@@ -20,21 +21,25 @@ public class ConstraintDefinitionMaintainVolume extends ConstraintDefinition {
     @Override
     public void bake(Space ownerSpace, Space targetSpace, Transform targetTransform, float influence) {
         if (volume != 1 && influence > 0) {
-            Transform ownerTransform = this.getOwnerTransform(ownerSpace);
-            switch (flag) {
-                case FLAG_MASK_X:
-                    ownerTransform.getScale().multLocal(1, volume, volume);
-                    break;
-                case FLAG_MASK_Y:
-                    ownerTransform.getScale().multLocal(volume, 1, volume);
-                    break;
-                case FLAG_MASK_Z:
-                    ownerTransform.getScale().multLocal(volume, volume, 1);
-                    break;
-                default:
-                    throw new IllegalStateException("Unknown flag value: " + flag);
+            // the maintain volume constraint is applied directly to object's scale, so no need to do it again
+            // but in case of bones we need to make computations
+            if (this.getOwner() instanceof Bone) {
+                Transform ownerTransform = this.getOwnerTransform(ownerSpace);
+                switch (flag) {
+                    case FLAG_MASK_X:
+                        ownerTransform.getScale().multLocal(1, volume, volume);
+                        break;
+                    case FLAG_MASK_Y:
+                        ownerTransform.getScale().multLocal(volume, 1, volume);
+                        break;
+                    case FLAG_MASK_Z:
+                        ownerTransform.getScale().multLocal(volume, volume, 1);
+                        break;
+                    default:
+                        throw new IllegalStateException("Unknown flag value: " + flag);
+                }
+                this.applyOwnerTransform(ownerTransform, ownerSpace);
             }
-            this.applyOwnerTransform(ownerTransform, ownerSpace);
         }
     }