Beispiel #1
0
 public static List<xxBone> CreateBoneList(List<ImportedBone> boneList)
 {
     List<xxBone> xxBoneList = new List<xxBone>(boneList.Count);
     for (int i = 0; i < boneList.Count; i++)
     {
         xxBone xxBone = new xxBone();
         xxBone.Name = boneList[i].Name;
         xxBone.Matrix = boneList[i].Matrix;
         xxBone.Index = i;
         xxBoneList.Add(xxBone);
     }
     return xxBoneList;
 }
Beispiel #2
0
        public bool CopyToSubmesh(xxFrame meshFrame, int submeshIdx, bool positions, bool bones, bool normals, bool uvs)
        {
            foreach (sviParser submeshSection in Parser.sections)
            {
                if (submeshSection.meshName == meshFrame.Name && submeshSection.submeshIdx == submeshIdx)
                {
                    xxSubmesh submesh = meshFrame.Mesh.SubmeshList[submeshIdx];
                    if (submeshSection.indices.Length != submesh.VertexList.Count)
                    {
                        Report.ReportLog(meshFrame.Name + "[" + submeshIdx + "] has a different number of vertices than defined in the sviex(" + submesh.VertexList.Count + "/" + submeshSection.indices.Length + ").");
                        return false;
                    }
                    if (positions && submeshSection.positionsPresent == 1)
                    {
                        for (ushort i = 0; i < submeshSection.positions.Length; i++)
                        {
                            submesh.VertexList[submeshSection.indices[i]].Position = submeshSection.positions[i];
                        }
                    }
                    if (bones && submeshSection.bonesPresent == 1)
                    {
                        for (ushort i = 0; i < submeshSection.boneWeights3.Length; i++)
                        {
                            submesh.VertexList[submeshSection.indices[i]].Weights3 = (float[])submeshSection.boneWeights3[i].Clone();
                        }
                        for (ushort i = 0; i < submeshSection.boneIndices.Length; i++)
                        {
                            submesh.VertexList[submeshSection.indices[i]].BoneIndices = (byte[])submeshSection.boneIndices[i].Clone();
                        }

                        meshFrame.Mesh.BoneList.Clear();
                        for (ushort i = 0; i < submeshSection.bones.Length; i++)
                        {
                            xxBone bone = new xxBone();
                            bone.Name = (string)submeshSection.bones[i].name.Clone();
                            bone.Index = submeshSection.bones[i].boneIdx;
                            bone.Matrix = submeshSection.bones[i].matrix;
                            meshFrame.Mesh.BoneList.Add(bone);
                        }
                    }
                    if (normals && submeshSection.normalsPresent == 1)
                    {
                        for (ushort i = 0; i < submeshSection.normals.Length; i++)
                        {
                            submesh.VertexList[submeshSection.indices[i]].Normal = submeshSection.normals[i];
                        }
                    }
                    if (uvs && submeshSection.uvsPresent == 1)
                    {
                        for (ushort i = 0; i < submeshSection.uvs.Length; i++)
                        {
                            submesh.VertexList[submeshSection.indices[i]].UV = new float[2] { submeshSection.uvs[i].X, submeshSection.uvs[i].Y };
                        }
                    }
                    meshFrame.Mesh.VertexListDuplicate = xx.CreateVertexListDup(meshFrame.Mesh.SubmeshList);
                    return true;
                }
            }
            return false;
        }
Beispiel #3
0
        public bool CopyToSubmesh(xxFrame meshFrame, int submeshIdx, bool positions, bool bones, bool normals, bool uvs)
        {
            foreach (sviParser submeshSection in Parser.sections)
            {
                if (submeshSection.meshName == meshFrame.Name && submeshSection.submeshIdx == submeshIdx)
                {
                    xxSubmesh submesh = meshFrame.Mesh.SubmeshList[submeshIdx];
                    if (submeshSection.indices.Length != submesh.VertexList.Count)
                    {
                        Report.ReportLog(meshFrame.Name + "[" + submeshIdx + "] has a different number of vertices than defined in the sviex(" + submesh.VertexList.Count + "/" + submeshSection.indices.Length + ").");
                        return(false);
                    }
                    if (positions && submeshSection.positionsPresent == 1)
                    {
                        for (ushort i = 0; i < submeshSection.positions.Length; i++)
                        {
                            submesh.VertexList[submeshSection.indices[i]].Position = submeshSection.positions[i];
                        }
                    }
                    if (bones && submeshSection.bonesPresent == 1)
                    {
                        for (ushort i = 0; i < submeshSection.boneWeights3.Length; i++)
                        {
                            submesh.VertexList[submeshSection.indices[i]].Weights3 = (float[])submeshSection.boneWeights3[i].Clone();
                        }
                        for (ushort i = 0; i < submeshSection.boneIndices.Length; i++)
                        {
                            submesh.VertexList[submeshSection.indices[i]].BoneIndices = (byte[])submeshSection.boneIndices[i].Clone();
                        }

                        meshFrame.Mesh.BoneList.Clear();
                        for (ushort i = 0; i < submeshSection.bones.Length; i++)
                        {
                            xxBone bone = new xxBone();
                            bone.Name   = (string)submeshSection.bones[i].name.Clone();
                            bone.Index  = submeshSection.bones[i].boneIdx;
                            bone.Matrix = submeshSection.bones[i].matrix;
                            meshFrame.Mesh.BoneList.Add(bone);
                        }
                    }
                    if (normals && submeshSection.normalsPresent == 1)
                    {
                        for (ushort i = 0; i < submeshSection.normals.Length; i++)
                        {
                            submesh.VertexList[submeshSection.indices[i]].Normal = submeshSection.normals[i];
                        }
                    }
                    if (uvs && submeshSection.uvsPresent == 1)
                    {
                        for (ushort i = 0; i < submeshSection.uvs.Length; i++)
                        {
                            submesh.VertexList[submeshSection.indices[i]].UV = new float[2] {
                                submeshSection.uvs[i].X, submeshSection.uvs[i].Y
                            };
                        }
                    }
                    meshFrame.Mesh.VertexListDuplicate = xx.CreateVertexListDup(meshFrame.Mesh.SubmeshList);
                    return(true);
                }
            }
            return(false);
        }
Beispiel #4
0
        protected List<xxBone> ParseBoneList()
        {
            int numBones = reader.ReadInt32();
            List<xxBone> boneList = new List<xxBone>(numBones);
            for (int i = 0; i < numBones; i++)
            {
                xxBone bone = new xxBone();
                boneList.Add(bone);

                bone.Name = reader.ReadName();
                bone.Index = reader.ReadInt32();
                bone.Matrix = reader.ReadMatrix();
            }
            return boneList;
        }