From a2ff0ba179061b272979c34cd81d78b55eef005a Mon Sep 17 00:00:00 2001 From: "Sha..rd" Date: Fri, 14 Sep 2012 05:24:10 +0000 Subject: [PATCH] * 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 --- .../com/jme3/animation/SkeletonControl.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/engine/src/core/com/jme3/animation/SkeletonControl.java b/engine/src/core/com/jme3/animation/SkeletonControl.java index c6a96cd41..93074b7bb 100644 --- a/engine/src/core/com/jme3/animation/SkeletonControl.java +++ b/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;