protected void regenInfluenceOffsets(int index) { FloatBuffer verts, norms; Vector3f vertex = new Vector3f(); Vector3f normal = new Vector3f(); Geometry geom = getSkin(index); verts = geom.getVertexBuffer(); if (verts == null) { logger.log(Level.FINE, "Skipping skin ''{0}'' because verts uninitialized", geom.getName()); return; } norms = geom.getNormalBuffer(); verts.clear(); norms.clear(); for (ArrayList<BoneInfluence> infs : cache[index]) { vertex.set(verts.get(), verts.get(), verts.get()); normal.set(norms.get(), norms.get(), norms.get()); if (infs == null) continue; if (bindMatrix != null) { bindMatrix.mult(vertex, vertex); bindMatrix.rotateVect(normal); } for (int x = infs.size() - 1; x >= 0; --x) { BoneInfluence infl = infs.get(x); if (infl.bone == null) continue; infl.vOffset = new Vector3f(vertex); infl.bone.bindMatrix.inverseTranslateVect(infl.vOffset); infl.bone.bindMatrix.inverseRotateVect(infl.vOffset); infl.nOffset = new Vector3f(normal); infl.bone.bindMatrix.inverseRotateVect(infl.nOffset); } } }