Deconstruct A Mesh
Extract Submeshes as Meshes
This snippet takes a mesh and splits its subMeshes into individual meshes. Returns array of new meshes.
function deconstructMesh(mesh) {if (mesh.subMeshes.length > 1) {var otherVertexData = BABYLON.VertexData.ExtractFromMesh(mesh, true, true);var indices = otherVertexData.indices;var normals = otherVertexData.normals;var positions = otherVertexData.positions;var uvs = otherVertexData.uvs;var newMeshArray = [];for (var index = 0; index < mesh.subMeshes.length; index++) {var newVertexData = new BABYLON.VertexData();var newI = indices.slice(mesh.subMeshes[index].indexStart, mesh.subMeshes[index].indexStart+mesh.subMeshes[index].indexCount);var newN = normals.slice(mesh.subMeshes[index].verticesStart * 3, mesh.subMeshes[index].verticesStart * 3 + mesh.subMeshes[index].verticesCount * 3);var newP = positions.slice(mesh.subMeshes[index].verticesStart * 3, mesh.subMeshes[index].verticesStart * 3 + mesh.subMeshes[index].verticesCount * 3);var newU = uvs.slice(mesh.subMeshes[index].verticesStart * 2, mesh.subMeshes[index].verticesStart * 2 + mesh.subMeshes[index].verticesCount * 2);for (var subIndex = 0; subIndex < newI.length; subIndex++) {newI[subIndex] = newI[subIndex] - mesh.subMeshes[index].verticesStart;}newVertexData.indices = newI;newVertexData.normals = newN;newVertexData.positions = newP;newVertexData.uvs = newU;var meshSubclass = new BABYLON.Mesh(mesh.name+'-'+index, scene);newVertexData.applyToMesh(meshSubclass);newMeshArray.push(meshSubclass);}return newMeshArray;} else {return [mesh];}}