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; }
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; }
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); }
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; }