--- Irrlicht/CAnimatedMeshMS3D.cpp 2005-08-20 22:17:50.000000000 +0200 +++ irrlicht_ms3d_speed_patch/CAnimatedMeshMS3D.cpp 2005-10-07 08:59:58.000000000 +0200 @@ -208,6 +208,17 @@ // MS3DMaterial *materials = (MS3DMaterial*)pPtr; // pPtr += sizeof(MS3DMaterial) * numMaterials; + + //SDI2000'S .MS3D 0-MATERIAL PATCH (part 1) + //( http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=8411 ) + if (numMaterials <= 0) + { + Buffers.push_back(SMS3DMeshBuffer()); + SMS3DMeshBuffer& buffer = Buffers.getLast(); + buffer.BoundingBox = &BoundingBox; + buffer.Vertices = &AnimatedVertices; + } + //SDI2000'S .MS3D 0-MATERIAL PATCH (part 1) for (i=0; i=0 && boneid<(s32)Joints.size()) + Joints[boneid].VertexIds.push_back(Vertices.size()); + Vertices.push_back(v); + index = Vertices.size() - 1; + } + Indices.push_back(index); + } + } + + //create groups + s32 iIndex = 0; + for (i=0; i<(int)Groups.size(); ++i) + { + SGroup& grp = Groups[i]; + core::array& vertexIds = grp.VertexIds; + + //SDI2000'S .MS3D 0-MATERIAL PATCH (part 2) + if (grp.MaterialIdx >= Buffers.size()) + grp.MaterialIdx = 0; + //SDI2000'S .MS3D 0-MATERIAL PATCH (part 2) + + SMS3DMeshBuffer &buffer = Buffers[grp.MaterialIdx]; + core::array& indices = buffer.Indices; + + for (s32 j=0; j<(int)grp.VertexIds.size(); ++j) + { + for (s32 k = 0; k < 3; k++) + indices.push_back(Indices[iIndex++]); + } + } + //ANDI'S .MS3D LOADER PATCH */ // calculate bounding box if (!Vertices.empty())