Browse Source

* Fix issue where a bone weight in a vertex was set to all zero would cause the vertex to snap to 0,0,0

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9726 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
Sha..rd 13 years ago
parent
commit
a2ff0ba179
1 changed files with 16 additions and 1 deletions
  1. 16 1
      engine/src/core/com/jme3/animation/SkeletonControl.java

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

@@ -340,6 +340,13 @@ public class SkeletonControl extends AbstractControl implements Cloneable {
 
             // iterate vertices and apply skinning transform for each effecting bone
             for (int vert = verts - 1; vert >= 0; vert--) {
+                // Skip this vertex if the first weight is zero.
+                if (weights[idxWeights] == 0) {
+                    idxPositions += 3;
+                    idxWeights += 4;
+                    continue;
+                }
+                
                 float nmx = normBuf[idxPositions];
                 float vtx = posBuf[idxPositions++];
                 float nmy = normBuf[idxPositions];
@@ -455,6 +462,14 @@ public class SkeletonControl extends AbstractControl implements Cloneable {
 
             // iterate vertices and apply skinning transform for each effecting bone
             for (int vert = verts - 1; vert >= 0; vert--) {
+                // Skip this vertex if the first weight is zero.
+                if (weights[idxWeights] == 0) {
+                    idxTangents += 4;
+                    idxPositions += 3;
+                    idxWeights += 4;
+                    continue;
+                }
+                
                 float nmx = normBuf[idxPositions];
                 float vtx = posBuf[idxPositions++];
                 float nmy = normBuf[idxPositions];
@@ -466,7 +481,7 @@ public class SkeletonControl extends AbstractControl implements Cloneable {
                 float tny = tanBuf[idxTangents++];
                 float tnz = tanBuf[idxTangents++];
 
-                //skipping the 4th component of the tangent since it doesn't have to be transformed
+                // skipping the 4th component of the tangent since it doesn't have to be transformed
                 idxTangents++;
 
                 float rx = 0, ry = 0, rz = 0, rnx = 0, rny = 0, rnz = 0, rtx = 0, rty = 0, rtz = 0;