Fixes Attributes.transform affecting only 1 vertex.

This commit is contained in:
RainWarrior committed 2015-09-29 02:29:16 +03:00
1 parent 90829a3164
commit d71384bc33
1 file changed
+14 -10
@@ -120,17 +120,21 @@ public class Attributes
throw new IllegalArgumentException("can only transform float position");
}
int[] data = Arrays.copyOf(quad.getVertexData(), quad.getVertexData().length);
float[] pos = new float[] { 0f, 0f, 0f, 1f };
for (int i = 0; i < Math.min(4, e.getElementCount()); i++)
int shift = data.length / 4;
for(int v = 0; v < 4; v++)
{
pos[i] = Float.intBitsToFloat(data[e.getOffset() / 4 + i]);
}
Vector4f vec = new Vector4f(pos);
transform.getMatrix().transform(vec);
vec.get(pos);
for (int i = 0; i < Math.min(4, e.getElementCount()); i++)
{
data[e.getOffset() / 4 + i] = Float.floatToRawIntBits(pos[i]);
float[] pos = new float[] { 0f, 0f, 0f, 1f };
for (int i = 0; i < Math.min(4, e.getElementCount()); i++)
{
pos[i] = Float.intBitsToFloat(data[shift * v + e.getOffset() / 4 + i]);
}
Vector4f vec = new Vector4f(pos);
transform.getMatrix().transform(vec);
vec.get(pos);
for (int i = 0; i < Math.min(4, e.getElementCount()); i++)
{
data[shift * v + e.getOffset() / 4 + i] = Float.floatToRawIntBits(pos[i]);
}
}
return new BakedQuad(data, quad.getTintIndex(), quad.getFace());
}