Пример #1
0
        public void OverwriteConvexWithCooked(string cookedName, string output)
        {
            if (colType == CollisionTypes.Convex)
            {
                FBXHelper.CookConvexCollision("uncooked.bin", "cooked.bin");
                byte[] data = File.ReadAllBytes(cookedName);

                using (BinaryWriter writer = new BinaryWriter(File.Open(output, FileMode.Create)))
                {
                    writer.Write(frameRef);
                    writer.Write(unk_byte);
                    writer.Write((byte)colType);
                    writer.Write(idHash);
                    writer.Write(colMaterial);
                    Matrix.WriteToFile(writer);
                    writer.Write(unkByte);
                    writer.Write((ushort)data.Length);
                    writer.Write(data);
                }
                if (File.Exists("cooked.bin"))
                {
                    File.Delete("cooked.bin");
                }
                if (File.Exists("uncooked.bin"))
                {
                    File.Delete("uncooked.bin");
                }
                Log.WriteLine("Recooked ItemDesc", LoggingTypes.MESSAGE, LogCategoryTypes.APPLICATION);
            }
        }
Пример #2
0
        public bool ExportSkinnedMeshToFBX(SkeletonAsset skeleton, MeshAsset mesh, int lodIndex, String targetdir, bool asOne)
        {
            FBXManager lSdkManager = new FBXManager();
            FBXScene   lScene      = new FBXScene();

            FBXHelper.InitializeSdkObjects(lSdkManager, lScene);
            FBXNode SceneRoot     = lScene.GetRootNode();
            FBXNode lSkeletonRoot = CreateFbxSkeleton(skeleton, lScene);

            SceneRoot.AddChild(lSkeletonRoot);
            if (asOne)
            {
                FBXNode fbxMesh = CreateFbxMesh(mesh.lods[lodIndex], lScene);
                CreateMeshSkinning(skeleton, mesh.lods[lodIndex], fbxMesh, lSkeletonRoot, lScene);
                SceneRoot.AddChild(fbxMesh);
                StoreRestPose(lScene, lSkeletonRoot, skeleton);
            }
            else
            {
                for (int i = 0; i < mesh.lods[lodIndex].sections.Count; i++)
                {
                    FBXNode CurrentSectionMesh = CreateFbxMesh(mesh.lods[lodIndex].sections[i], lScene);
                    CreateMeshSkinning(skeleton, mesh.lods[lodIndex].sections[i], CurrentSectionMesh, lSkeletonRoot, lScene);
                    SceneRoot.AddChild(CurrentSectionMesh);
                    StoreBindPose(lScene, CurrentSectionMesh);
                }
            }
            return(SaveScene(targetdir, lSdkManager, lScene));
        }
Пример #3
0
        public void ExportSkeletalMeshToFbx(MESkeletalMesh mesh, string meshName, string targetdir)
        {
            FBXManager lSdkManager = new FBXManager();
            FBXScene   lScene      = new FBXScene();

            FBXHelper.InitializeSdkObjects(lSdkManager, lScene);
            FBXNode SceneRoot     = lScene.GetRootNode();
            FBXNode lSkeletonRoot = CreateFbxSkeleton(mesh.Bones, lScene);

            SceneRoot.AddChild(lSkeletonRoot);
            try
            {
                FBXNode fbxMesh = CreateFbxMesh(mesh, meshName, lScene);
                CreateMeshSkinning(mesh, 0, fbxMesh, lSkeletonRoot, lScene);
                SceneRoot.AddChild(fbxMesh);
                //StoreRestPose(lScene, lSkeletonRoot, skeleton);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            bool lResult = FBXHelper.SaveScene(lSdkManager, lScene, targetdir);

            FBXHelper.DestroySdkObjects(lSdkManager, lResult);
        }
Пример #4
0
        public TriangleMesh Build(IList <Vector3> vertexList, IList <Triangle> triangleList, IList <ushort> materialsList)
        {
            Init(vertexList, triangleList, materialsList);

            using (BinaryWriter writer = new BinaryWriter(File.Open("mesh.bin", FileMode.Create)))
            {
                Save(writer);
            }

            FBXHelper.CookTriangleCollision("mesh.bin", "cook.bin");

            TriangleMesh cookedTriangleMesh = new TriangleMesh();

            using (BinaryReader reader = new BinaryReader(File.Open("cook.bin", FileMode.Open)))
            {
                cookedTriangleMesh.Load(reader);
            }


            if (File.Exists("mesh.bin"))
            {
                File.Delete("mesh.bin");
            }
            if (File.Exists("cook.bin"))
            {
                File.Delete("cook.bin");
            }

            cookedTriangleMesh.Force32BitIndices();
            return(cookedTriangleMesh);
        }
Пример #5
0
        private bool SaveScene(String targetdir, FBXManager pSdkManager, FBXScene pScene)
        {
            bool lResult = FBXHelper.SaveScene(pSdkManager, pScene, targetdir);

            FBXHelper.DestroySdkObjects(pSdkManager, lResult);
            return(lResult);
        }
Пример #6
0
 private void ConvertButton_Click(object sender, EventArgs e)
 {
     if (ImportBox.Text.Contains(".m2t"))
     {
         FBXHelper.ConvertM2T(ImportBox.Text, ExportBox.Text);
     }
     else if (ImportBox.Text.Contains(".fbx"))
     {
         FBXHelper.ConvertFBX(ImportBox.Text, ExportBox.Text);
     }
 }
Пример #7
0
        public bool ReadFromFbx(string file)
        {
            string m2tFile = file.Remove(file.Length - 4, 4) + ".m2t";
            int    result  = FBXHelper.ConvertFBX(file, m2tFile);

            using (BinaryReader reader = new BinaryReader(File.Open(m2tFile, FileMode.Open)))
            {
                ReadFromM2T(reader);
            }
            if (File.Exists(m2tFile))
            {
                File.Delete(m2tFile);
            }
            return(true);
        }
Пример #8
0
 private void ConvertButton_Click(object sender, EventArgs e)
 {
     if (File.Exists(ImportBox.Text))
     {
         if (ImportBox.Text.Contains(".m2t"))
         {
             FBXHelper.ConvertM2T(ImportBox.Text, ExportBox.Text);
         }
         else if (ImportBox.Text.Contains(".fbx"))
         {
             FBXHelper.ConvertFBX(ImportBox.Text, ExportBox.Text);
         }
     }
     else
     {
         MessageBox.Show("Import file does not exist!", "Toolkit", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
Пример #9
0
        private void SetBoneTransform(SkeletonAsset Skeleton, FBXNode pSkeletonRoot)
        {
            Dictionary <String, FBBone> pose = Skeleton.ModelBones;

            foreach (string key in pose.Keys)
            {
                FBBone     bonePose      = pose[key];
                FBXNode    fbxBone       = pSkeletonRoot.FindChild(key);
                FBXVector4 ForwardM      = new FBXVector4(bonePose.Forward.members[0], bonePose.Forward.members[1], bonePose.Forward.members[2], 0);
                FBXVector4 RightM        = new FBXVector4(bonePose.Right.members[0], bonePose.Right.members[1], bonePose.Right.members[2], 0);
                FBXVector4 UpM           = new FBXVector4(bonePose.Up.members[0], bonePose.Up.members[1], bonePose.Up.members[2], 0);
                FBXVector4 TransM        = new FBXVector4(bonePose.Location.members[0] * exportScale, bonePose.Location.members[1] * exportScale, bonePose.Location.members[2] * exportScale, 1);
                FBXAMatrix transfoMatrix = new FBXAMatrix();
                transfoMatrix.SetRow(0, RightM);
                transfoMatrix.SetRow(1, UpM);
                transfoMatrix.SetRow(2, ForwardM);
                transfoMatrix.SetRow(3, TransM);
                FBXHelper.SetGlobalDefaultPosition(fbxBone, transfoMatrix);
            }
        }
Пример #10
0
        public bool ExportMeshWithMorph(SkeletonAsset Skeleton, MeshAsset mesh, int lodIndex, List <Vector> morphVertex, List <Vector> morphBones, String targetdir)
        {
            FBXManager lSdkManager = new FBXManager();
            FBXScene   lScene      = new FBXScene();

            FBXHelper.InitializeSdkObjects(lSdkManager, lScene);
            FBXNode SceneRoot = lScene.GetRootNode();
            FBXNode fbxMesh   = CreateFbxMesh(mesh.lods[lodIndex], lScene);

            AddMorphToMesh(lScene, fbxMesh, morphVertex);
            SceneRoot.AddChild(fbxMesh);
            if (Skeleton != null)
            {
                FBXNode lSkeletonRoot = CreateFbxSkeleton(Skeleton, lScene);
                CreateMeshSkinning(Skeleton, mesh.lods[lodIndex], fbxMesh, lSkeletonRoot, lScene);
                UpdateSkeletonWithMorph(Skeleton, lSkeletonRoot, morphBones);
                SceneRoot.AddChild(lSkeletonRoot);
                StoreBindPose(lScene, fbxMesh);
            }
            return(SaveScene(targetdir, lSdkManager, lScene));
        }
Пример #11
0
        public bool ReadFromFbx(string file)
        {
            string args    = "-ConvertToM2T ";
            string m2tFile = file.Remove(file.Length - 4, 4) + ".m2t";

            args += ("\"" + file + "\" ");
            args += ("\"" + m2tFile + "\" ");

            if (FBXHelper.ConvertFBX(file, m2tFile) == 0)
            {
                using (BinaryReader reader = new BinaryReader(File.Open(m2tFile, FileMode.Open)))
                    ReadFromM2T(reader);

                if (File.Exists(m2tFile))
                {
                    File.Delete(m2tFile);
                }

                return(true);
            }
            return(false);
        }
Пример #12
0
        public void ExportMeshWithMorph(Unreal.BioMorphFace morph, int lodIndex, String targetdir)
        {
            FBXManager lSdkManager = new FBXManager();
            FBXScene   lScene      = new FBXScene();

            FBXHelper.InitializeSdkObjects(lSdkManager, lScene);
            FBXNode        SceneRoot = lScene.GetRootNode();
            MESkeletalMesh mesh      = morph.Apply();
            FBXNode        fbxMesh   = CreateFbxMesh(mesh, morph.Name, lScene);

            SceneRoot.AddChild(fbxMesh);
            if (mesh.Bones != null)
            {
                FBXNode lSkeletonRoot = CreateFbxSkeleton(mesh.Bones, lScene);
                CreateMeshSkinning(mesh, lodIndex, fbxMesh, lSkeletonRoot, lScene);
                UpdateSkeletonWithMorph(morph, lSkeletonRoot);
                SceneRoot.AddChild(lSkeletonRoot);
                //StoreBindPose(lScene, fbxMesh);
            }
            bool lResult = FBXHelper.SaveScene(lSdkManager, lScene, targetdir);

            FBXHelper.DestroySdkObjects(lSdkManager, lResult);
        }
Пример #13
0
        public bool ExportStaticMeshToFBX(MeshAsset mesh, int lodIndex, String targetdir, bool asOne)
        {
            FBXManager lSdkManager = new FBXManager();
            FBXScene   lScene      = new FBXScene();

            FBXHelper.InitializeSdkObjects(lSdkManager, lScene);
            FBXNode SceneRoot = lScene.GetRootNode();

            if (asOne)
            {
                FBXNode fbxMesh = CreateFbxMesh(mesh.lods[lodIndex], lScene);
                SceneRoot.AddChild(fbxMesh);
            }
            else
            {
                for (int i = 0; i < mesh.lods[lodIndex].sections.Count; i++)
                {
                    FBXNode CurrentSectionMesh = CreateFbxMesh(mesh.lods[lodIndex].sections[i], lScene);
                    SceneRoot.AddChild(CurrentSectionMesh);
                }
            }
            return(SaveScene(targetdir, lSdkManager, lScene));
        }
Пример #14
0
        public void WriteToFile(BinaryWriter writer)
        {
            writer.Write(version);
            writer.Write(unk0);
            writer.Write(placementData.Count);
            for (int i = 0; i != placementData.Count; i++)
            {
                placementData[i].WriteToFile(writer);
            }

            writer.Write(nxsData.Count);
            for (int i = 0; i != nxsData.Count; i++)
            {
                NXSStruct data = nxsData.ElementAt(i).Value;
                using (BinaryWriter meshWriter = new BinaryWriter(File.Open("mesh.bin", FileMode.Create)))
                    data.Data.WriteToFile(meshWriter);

                string args = "-CookCollisions ";
                args += ("\"" + "mesh" + ".bin\" ");
                args += ("\"" + "cook" + ".bin\"");
                FBXHelper.CookTriangleCollision("mesh.bin", "cook.bin");

                using (BinaryReader meshReader = new BinaryReader(File.Open("cook.bin", FileMode.Open)))
                    nxsData.ElementAt(i).Value.Data.ReadFromFile(meshReader);

                nxsData.ElementAt(i).Value.WriteToFile(writer);
            }

            if (File.Exists("mesh.bin"))
            {
                File.Delete("mesh.bin");
            }
            if (File.Exists("cook.bin"))
            {
                File.Delete("cook.bin");
            }
        }
Пример #15
0
 public void ExportToFbx(string path, bool saveBinary)
 {
     FBXHelper.ConvertM2T(path + name + ".m2t", path + name + ".fbx");
 }