private static void WriteSkinWeights(XSkinWeights skin, XofFileSaveData saveData)
        {
            byte[] data;

            using (var ms = new MemoryStream())
                using (var writer = new BinaryWriter(ms))
                {
                    WriteString(skin.TransformNodeName, writer);

                    writer.Write(skin.VertexIndices.Count);

                    for (int i = 0; i < skin.VertexIndices.Count; i++)
                    {
                        writer.Write(skin.VertexIndices[i]);
                    }

                    for (int i = 0; i < skin.Weights.Count; i++)
                    {
                        writer.Write(skin.Weights[i]);
                    }

                    WriteMatrix4x4(skin.MatrixOffset, writer);

                    data = ms.ToArray();
                }

            using (saveData.AddData(XofFileDefaultTemplates.SkinWeightsId, skin.Name, null, data))
            {
            }
        }
Beispiel #2
0
        private static XSkinWeights ReadSkinWeights(XofFileEnumData enumData)
        {
            var skin = new XSkinWeights
            {
                Name = enumData.GetName()
            };

            byte[] data = enumData.GetData();

            using (var ms = new MemoryStream(data, false))
                using (var reader = new BinaryReader(ms))
                {
                    skin.TransformNodeName = ReadString(reader);

                    int nWeights = reader.ReadInt32();
                    skin.VertexIndices.Capacity = nWeights;
                    skin.Weights.Capacity       = nWeights;

                    for (int i = 0; i < nWeights; i++)
                    {
                        skin.VertexIndices.Add(reader.ReadInt32());
                    }

                    for (int i = 0; i < nWeights; i++)
                    {
                        skin.Weights.Add(reader.ReadSingle());
                    }

                    skin.MatrixOffset = ReadMatrix4x4(reader);

                    if (ms.Position != ms.Length)
                    {
                        throw new InvalidDataException();
                    }
                }

            if (enumData.GetChildrenCount() != 0)
            {
                throw new InvalidDataException();
            }

            return(skin);
        }