Пример #1
0
        public static Ai.Scene ConvertAiSceneFromObjectSets(List <ObjectSet> objectSets,
                                                            TextureDatabase textureDatabase = null)
        {
            var aiScene = new Ai.Scene();

            aiScene.RootNode = new Ai.Node("RootNode");

            foreach (var objectSet in objectSets.Where(x => x.TextureSet != null))
            {
                TextureUtilities.RenameTextures(objectSet.TextureSet, textureDatabase);
            }

            foreach (var objectSet in objectSets)
            {
                foreach (var obj in objectSet.Objects)
                {
                    ConvertAiMaterialsFromMaterials(aiScene, obj.Materials, objectSet.TextureSet);
                }
            }

            var bones         = new List <BoneInfo>();
            var boneParentMap = new Dictionary <string, string>();

            foreach (var objectSet in objectSets)
            {
                foreach (var obj in objectSet.Objects.Where(x => x.Skin != null))
                {
                    foreach (var boneInfo in obj.Skin.Bones)
                    {
                        if (!boneParentMap.ContainsKey(boneInfo.Name))
                        {
                            var parentBone =
                                obj.Skin.Bones.FirstOrDefault(x => x.Id == boneInfo.ParentId);

                            bones.Add(boneInfo);
                            boneParentMap.Add(boneInfo.Name, parentBone?.Name);
                        }
                    }
                }
            }

            ConvertAiNodesFromBones(aiScene, bones, boneParentMap);

            foreach (var objectSet in objectSets)
            {
                ConvertAiNodesFromObjects(aiScene, objectSet.Objects);
            }

            return(aiScene);
        }
Пример #2
0
        public static Ai.Scene ConvertAiSceneFromModels(List <Model> models, TextureDatabase textureDatabase = null)
        {
            var aiScene = new Ai.Scene();

            aiScene.RootNode = new Ai.Node("RootNode");

            foreach (var model in models.Where(x => x.TextureSet != null))
            {
                TextureUtilities.RenameTextures(model.TextureSet, textureDatabase);
            }

            foreach (var model in models)
            {
                foreach (var mesh in model.Meshes)
                {
                    ConvertAiMaterialsFromMaterials(aiScene, mesh.Materials, model.TextureSet);
                }
            }

            var bones         = new List <Bone>();
            var boneParentMap = new Dictionary <string, string>();

            foreach (var model in models)
            {
                foreach (var mesh in model.Meshes.Where(x => x.Skin != null))
                {
                    foreach (var bone in mesh.Skin.Bones)
                    {
                        if (!boneParentMap.ContainsKey(bone.Name))
                        {
                            var parentBone =
                                mesh.Skin.Bones.FirstOrDefault(x => x.Id == bone.ParentId);

                            bones.Add(bone);
                            boneParentMap.Add(bone.Name, parentBone?.Name);
                        }
                    }
                }
            }

            ConvertAiNodesFromBones(aiScene, bones, boneParentMap);

            foreach (var model in models)
            {
                ConvertAiNodesFromMeshes(aiScene, model.Meshes);
            }

            return(aiScene);
        }