// add a subset of an array as a mesh. public void AddCollidableMeshToTree(List <VertexPositionColor> collisionVertices, int collisionStart, int count) { int collisionEnd = collisionStart + count; //collisionVertices.Count; if (collisionStart != collisionEnd) { // break large meshes into triangles to improve AABB tree. // TODO - also split meshes with large areas? if (collisionEnd - collisionStart > 8000) { // add individual triangles from mesh for (int i = collisionStart; i < collisionEnd;) { var points = new Vector3[3]; points[0] = collisionVertices[i++].Position; points[1] = collisionVertices[i++].Position; points[2] = collisionVertices[i++].Position; m_collisionMeshTree.Insert(BoundingBox.CreateFromPoints(points), points); } return; } { // Add collidable mesh to bb tree var points = new Vector3[collisionEnd - collisionStart]; for (int i = collisionStart, dst = 0; i < collisionEnd; i++, dst++) { points[dst] = collisionVertices[i].Position; } m_collisionMeshTree.Insert(BoundingBox.CreateFromPoints(points), points); } } }