diff --git a/src/main/java/de/javagl/obj/DefaultFloatTuple.java b/src/main/java/de/javagl/obj/DefaultFloatTuple.java index f140246..96b2542 100644 --- a/src/main/java/de/javagl/obj/DefaultFloatTuple.java +++ b/src/main/java/de/javagl/obj/DefaultFloatTuple.java @@ -211,7 +211,11 @@ public int getDimensions() return values.length; } - + @Override + public float[] getValues() { + return values; + } + @Override public String toString() { diff --git a/src/main/java/de/javagl/obj/FloatTuple.java b/src/main/java/de/javagl/obj/FloatTuple.java index 408dc44..82a0073 100644 --- a/src/main/java/de/javagl/obj/FloatTuple.java +++ b/src/main/java/de/javagl/obj/FloatTuple.java @@ -84,4 +84,11 @@ public interface FloatTuple * @return The dimensions of this tuple */ int getDimensions(); + + /** + * Raw values as an array + * + * @return Raw values as an array + */ + float[] getValues(); } diff --git a/src/main/java/de/javagl/obj/ObjData.java b/src/main/java/de/javagl/obj/ObjData.java index 779d155..c36aa2e 100644 --- a/src/main/java/de/javagl/obj/ObjData.java +++ b/src/main/java/de/javagl/obj/ObjData.java @@ -53,7 +53,8 @@ public class ObjData private static int[] getNumFaceVertices(ReadableObj obj) { int[] numVerticesOfFaces = new int[obj.getNumFaces()]; - for(int i = 0; i < obj.getNumFaces(); i++) + int faces = obj.getNumFaces(); + for(int i = 0; i < faces; i++) { ObjFace face = obj.getFace(i); numVerticesOfFaces[i] = face.getNumVertices(); @@ -110,7 +111,7 @@ private static int sum(int[] array) public static int[] getFaceVertexIndicesArray(ReadableObj obj) { int[] array = new int[getTotalNumFaceVertices(obj)]; - getFaceVertexIndices(obj, IntBuffer.wrap(array)); + getFaceVertexIndices(obj, array); return array; } @@ -131,8 +132,9 @@ public static int[] getFaceVertexIndicesArray(ReadableObj obj) */ public static IntBuffer getFaceVertexIndices(ReadableObj obj) { - IntBuffer buffer = createDirectIntBuffer(getTotalNumFaceVertices(obj)); - getFaceVertexIndices(obj, buffer); + int[] array = getFaceVertexIndicesArray(obj); + IntBuffer buffer = createDirectIntBuffer(array.length); + buffer.put(array); buffer.position(0); return buffer; } @@ -151,7 +153,7 @@ public static int[] getFaceVertexIndicesArray( ReadableObj obj, int numVerticesPerFace) { int[] array = new int[obj.getNumFaces() * numVerticesPerFace]; - getFaceVertexIndices(obj, IntBuffer.wrap(array)); + getFaceVertexIndices(obj, array); return array; } @@ -170,9 +172,9 @@ public static int[] getFaceVertexIndicesArray( public static IntBuffer getFaceVertexIndices( ReadableObj obj, int numVerticesPerFace) { - IntBuffer buffer = createDirectIntBuffer( - obj.getNumFaces() * numVerticesPerFace); - getFaceVertexIndices(obj, buffer); + int[] array = getFaceVertexIndicesArray(obj, numVerticesPerFace); + IntBuffer buffer = createDirectIntBuffer(array.length); + buffer.put(array); buffer.position(0); return buffer; } @@ -193,14 +195,16 @@ public static IntBuffer getFaceVertexIndices( * @throws BufferOverflowException If the buffer can not store the result */ public static void getFaceVertexIndices( - ReadableObj obj, IntBuffer target) + ReadableObj obj, int[] target) { - for(int i = 0; i < obj.getNumFaces(); i++) + int position = 0; + int faces = obj.getNumFaces(); + for(int i = 0; i < faces; i++) { ObjFace face = obj.getFace(i); - for (int j=0; j