Merge pull request #188 from SebastianPFernandez/combine-index-bug-patch

Fixed indexing bug in MeshGeometry.combine
diff --git a/lib/src/vector_math_geometry/mesh_geometry.dart b/lib/src/vector_math_geometry/mesh_geometry.dart
index 254d496..3080a9a 100644
--- a/lib/src/vector_math_geometry/mesh_geometry.dart
+++ b/lib/src/vector_math_geometry/mesh_geometry.dart
@@ -213,14 +213,16 @@
     // Copy over the buffer data:
     int bufferOffset = 0;
     int indexOffset = 0;
+    int vertexOffset = 0;
     for (int i = 0; i < meshes.length; ++i) {
       final MeshGeometry srcMesh = meshes[i];
       mesh.buffer.setAll(bufferOffset, srcMesh.buffer);
 
       if (totalIndices > 0) {
         for (int j = 0; j < srcMesh.indices.length; ++j) {
-          mesh.indices[j + indexOffset] = srcMesh.indices[j] + bufferOffset;
+          mesh.indices[j + indexOffset] = srcMesh.indices[j] + vertexOffset;
         }
+        vertexOffset += srcMesh.length;
         indexOffset += srcMesh.indices.length;
       }
 
diff --git a/test/geometry_test.dart b/test/geometry_test.dart
index 15f6990..368ee3a 100644
--- a/test/geometry_test.dart
+++ b/test/geometry_test.dart
@@ -122,11 +122,25 @@
   }
 }
 
+void testCombineIndices() {
+  // Combining two meshes should generate indices that are not out of range.
+  SphereGenerator sphereGenerator = new SphereGenerator();
+
+  MeshGeometry sphere0 = sphereGenerator.createSphere(10.0,
+      latSegments: 8, lonSegments: 8);
+  MeshGeometry sphere1 = sphereGenerator.createSphere(10.0,
+      latSegments: 8, lonSegments: 8);
+
+  MeshGeometry combined = new MeshGeometry.combine([sphere0, sphere1]);
+  expect(combined.indices, everyElement(lessThan(combined.length)));  
+}
+
 void main() {
   group('Geometry', () {
     group('Generators', () {
       test('normal generation', testGenerateNormals);
       test('tangent generation', testGenerateTangents);
+      test('geometry combination', testCombineIndices);
     });
     group('Filters', () {
       test('transform filter', testTransformFilter);