diff --git a/engine/src/tools/jme3tools/optimize/GeometryBatchFactory.java b/engine/src/tools/jme3tools/optimize/GeometryBatchFactory.java index ae6ad8c57..ed1a3e4ce 100644 --- a/engine/src/tools/jme3tools/optimize/GeometryBatchFactory.java +++ b/engine/src/tools/jme3tools/optimize/GeometryBatchFactory.java @@ -62,14 +62,15 @@ public class GeometryBatchFactory { } } - private static void doTransformTangents(FloatBuffer inBuf, int offset, FloatBuffer outBuf, Matrix4f transform) { + private static void doTransformTangents(FloatBuffer inBuf, int offset, int components, FloatBuffer outBuf, Matrix4f transform) { Vector3f tan = new Vector3f(); - float handedness = 0; + float handedness; + // offset is given in element units // convert to be in component units - offset *= 4; + offset *= components; - for (int i = 0; i < inBuf.capacity() / 4; i++) { + for (int i = 0; i < inBuf.capacity() / components; i++) { tan.x = inBuf.get(i * 4 + 0); tan.y = inBuf.get(i * 4 + 1); tan.z = inBuf.get(i * 4 + 2); @@ -81,7 +82,6 @@ public class GeometryBatchFactory { outBuf.put(offset + i * 4 + 1, tan.y); outBuf.put(offset + i * 4 + 2, tan.z); outBuf.put(offset + i * 4 + 3, handedness); - } } @@ -211,7 +211,8 @@ public class GeometryBatchFactory { }else if(Type.Tangent.ordinal() == bufType){ FloatBuffer inPos = (FloatBuffer) inBuf.getDataReadOnly(); FloatBuffer outPos = (FloatBuffer) outBuf.getData(); - doTransformTangents(inPos, globalVertIndex, outPos, worldMatrix); + int components = inBuf.getNumComponents(); + doTransformTangents(inPos, globalVertIndex, components, outPos, worldMatrix); } else { inBuf.copyElements(0, outBuf, globalVertIndex, geomVertCount); }