فهرست منبع

Fixed double TempVars locking in skeleton and bone when computing skinning matrices, thanks to cyuczieekc

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7301 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
rem..om 14 سال پیش
والد
کامیت
6c2eba12ec
2فایلهای تغییر یافته به همراه6 افزوده شده و 12 حذف شده
  1. 5 11
      engine/src/core/com/jme3/animation/Bone.java
  2. 1 1
      engine/src/core/com/jme3/animation/Skeleton.java

+ 5 - 11
engine/src/core/com/jme3/animation/Bone.java

@@ -93,7 +93,6 @@ public final class Bone implements Savable {
     private Quaternion worldRot = new Quaternion();
     private Vector3f worldScale = new Vector3f();
 
-    
     /**
      * Creates a new bone with the given name.
      * 
@@ -104,7 +103,7 @@ public final class Bone implements Savable {
 
         initialPos = new Vector3f();
         initialRot = new Quaternion();
-        initialScale = new Vector3f(1,1,1);
+        initialScale = new Vector3f(1, 1, 1);
 
         worldBindInversePos = new Vector3f();
         worldBindInverseRot = new Quaternion();
@@ -323,7 +322,7 @@ public final class Bone implements Savable {
      * The skinning transform applies the animation of the bone to a vertex.
      * @param m
      */
-    void getOffsetTransform(Matrix4f m, Quaternion tmp1, Vector3f tmp2, Vector3f tmp3) {
+    void getOffsetTransform(Matrix4f m, Quaternion tmp1, Vector3f tmp2, Vector3f tmp3, Matrix3f rotMat) {
 
         //Computing scale
         Vector3f scale = worldScale.mult(worldBindInverseScale, tmp3);
@@ -334,15 +333,11 @@ public final class Bone implements Savable {
         //computing translation
         //translation depend on rotation and scale
         Vector3f translate = worldPos.add(rotate.mult(scale.mult(worldBindInversePos, tmp2), tmp2), tmp2);
-        
+
         //populating the matrix
         m.loadIdentity();
-        TempVars vars = TempVars.get();
-        assert vars.lock();
-        Matrix3f rotMat = vars.tempMat3;
         m.setTransform(translate, scale, rotate.toRotationMatrix(rotMat));
 
-        assert vars.unlock();
     }
 
     /**
@@ -377,7 +372,6 @@ public final class Bone implements Savable {
         worldPos.set(translation);
         worldRot.set(rotation);
     }
-    
     protected Vector3f tmpVec = new Vector3f();
     protected Quaternion tmpQuat = new Quaternion();
 
@@ -388,7 +382,7 @@ public final class Bone implements Savable {
     public Vector3f getTmpVec() {
         return tmpVec;
     }
- 
+
     /**
      * Returns the attachment node.
      * Attach models and effects to this node to make
@@ -425,7 +419,7 @@ public final class Bone implements Savable {
 
         localPos.set(initialPos).addLocal(translation);
         localRot.set(initialRot).multLocal(rotation);
-       
+
         if (scale != null) {
             localScale.set(initialScale).multLocal(scale);
         }

+ 1 - 1
engine/src/core/com/jme3/animation/Skeleton.java

@@ -213,7 +213,7 @@ public final class Skeleton implements Savable {
         TempVars vars = TempVars.get();
         assert vars.lock();
         for (int i = 0; i < boneList.length; i++) {
-            boneList[i].getOffsetTransform(skinningMatrixes[i], vars.quat1, vars.vect1, vars.vect2);
+            boneList[i].getOffsetTransform(skinningMatrixes[i], vars.quat1, vars.vect1, vars.vect2, vars.tempMat3);
         }
         assert vars.unlock();
         return skinningMatrixes;