示例#1
0
            public MeshContent Process()
            {
                newMesh      = new MeshContent();
                newMesh.Name = splitter.mesh.Name + splitter.currentIndex.ToString();
                SortedDictionary <string, object> faceBones = new SortedDictionary <string, object>();
                GeometryContent newGeom = new GeometryContent();

                while (index < geom.Indices.Count - 1)
                {
                    int[] faceIndices = new int[]
                    {
                        geom.Indices[index],
                        geom.Indices[index + 1],
                        geom.Indices[index + 2]
                    };

                    for (int i = 0; i < 3; i++)
                    {
                        BoneWeightCollection weightCollection = weightChannel[
                            geom.Indices[index + i]];
                        foreach (BoneWeight weight in weightCollection)
                        {
                            if (!meshBones.ContainsKey(weight.BoneName) &&
                                !faceBones.ContainsKey(weight.BoneName))
                            {
                                faceBones.Add(weight.BoneName, null);
                            }
                        }
                    }
                    if (meshBones.Count + faceBones.Count > splitter.maxBones)
                    {
                        faceBones.Clear();
                        vertexEndIndex = index;
                        break;
                    }

                    foreach (string s in faceBones.Keys)
                    {
                        meshBones.Add(s, null);
                    }
                    faceBones.Clear();
                    for (int i = 0; i < 3; i++)
                    {
                        if (oldToNewDict.ContainsKey(faceIndices[i]))
                        {
                        }
                        else
                        {
                            int newIndex = newMesh.Positions.Count;
                            newMesh.Positions.Add(geom.Vertices.Positions[faceIndices[i]]);

                            oldToNewDict.Add(faceIndices[i], newIndex);
                            newGeom.Vertices.Add(newIndex);
                        }
                        newGeom.Indices.Add(oldToNewDict[faceIndices[i]]);
                    }
                    index         += 3;
                    vertexEndIndex = index;
                }
                newMesh.Geometry.Add(newGeom);
                Finish();
                return(newMesh);
            }