|
|
|
@ -61,6 +61,29 @@ public class GeometryBatchFactory { |
|
|
|
|
outBuf.put(offset + i * 3 + 2, norm.z); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void doTransformTangents(FloatBuffer inBuf, int offset, FloatBuffer outBuf, Matrix4f transform) { |
|
|
|
|
Vector3f tan = new Vector3f(); |
|
|
|
|
float handedness = 0; |
|
|
|
|
// offset is given in element units
|
|
|
|
|
// convert to be in component units
|
|
|
|
|
offset *= 4; |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < inBuf.capacity() / 4; i++) { |
|
|
|
|
tan.x = inBuf.get(i * 4 + 0); |
|
|
|
|
tan.y = inBuf.get(i * 4 + 1); |
|
|
|
|
tan.z = inBuf.get(i * 4 + 2); |
|
|
|
|
handedness = inBuf.get(i * 4 + 3); |
|
|
|
|
|
|
|
|
|
transform.multNormal(tan, tan); |
|
|
|
|
|
|
|
|
|
outBuf.put(offset + i * 4 + 0, tan.x); |
|
|
|
|
outBuf.put(offset + i * 4 + 1, tan.y); |
|
|
|
|
outBuf.put(offset + i * 4 + 2, tan.z); |
|
|
|
|
outBuf.put(offset + i * 4 + 3, handedness); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Merges all geometries in the collection into |
|
|
|
@ -181,10 +204,14 @@ public class GeometryBatchFactory { |
|
|
|
|
FloatBuffer inPos = (FloatBuffer) inBuf.getDataReadOnly(); |
|
|
|
|
FloatBuffer outPos = (FloatBuffer) outBuf.getData(); |
|
|
|
|
doTransformVerts(inPos, globalVertIndex, outPos, worldMatrix); |
|
|
|
|
} else if (Type.Normal.ordinal() == bufType || Type.Tangent.ordinal() == bufType) { |
|
|
|
|
} else if (Type.Normal.ordinal() == bufType) { |
|
|
|
|
FloatBuffer inPos = (FloatBuffer) inBuf.getDataReadOnly(); |
|
|
|
|
FloatBuffer outPos = (FloatBuffer) outBuf.getData(); |
|
|
|
|
doTransformNorms(inPos, globalVertIndex, outPos, worldMatrix); |
|
|
|
|
}else if(Type.Tangent.ordinal() == bufType){ |
|
|
|
|
FloatBuffer inPos = (FloatBuffer) inBuf.getDataReadOnly(); |
|
|
|
|
FloatBuffer outPos = (FloatBuffer) outBuf.getData(); |
|
|
|
|
doTransformTangents(inPos, globalVertIndex, outPos, worldMatrix); |
|
|
|
|
} else { |
|
|
|
|
inBuf.copyElements(0, outBuf, globalVertIndex, geomVertCount); |
|
|
|
|
} |
|
|
|
|