示例#1
0
        public static void ExportToFile <T>([NotNull] string path, [NotNull] Metamesh model,
                                            [CanBeNull] Skeleton skeleton, ModelExportOption option = 0)
            where T : AbstractModelExporter, new()
        {
            T   exporter = new T();
            var dirPath  = Path.GetDirectoryName(path) + "/";

            var exportedMeshes         = model.Meshes.FindAll(mesh => mesh.Lod == 0);
            HashSet <Texture> textures = new HashSet <Texture>();

            foreach (var mesh in exportedMeshes)
            {
                if (mesh.Material.TryGetItem(out var mat1))
                {
                    foreach (var texDep in mat1.Textures.Values)
                    {
                        if (texDep.TryGetItem(out var tex))
                        {
                            textures.Add(tex);
                        }
                    }
                }

                if (exporter.SupportsSecondMaterial && mesh.Material.TryGetItem(out var mat2))
                {
                    foreach (var texDep in mat2.Textures.Values)
                    {
                        if (texDep.TryGetItem(out var tex))
                        {
                            textures.Add(tex);
                        }
                    }
                }
            }

            string prefix = option.HasFlag(ModelExportOption.ExportTexturesSubFolder)
                                ? model.Name + "/"
                                : string.Empty;

            foreach (var tex in textures)
            {
                var texRelPath = prefix + tex.Name + "." + GetTextureFormat(tex.Format, option);
                exporter.TexturePathMapping[tex] = texRelPath;
                var texFullPath = dirPath + texRelPath;
                if (tex.HasPixelData && (option.HasFlag(ModelExportOption.ExportTextures) ||
                                         option.HasFlag(ModelExportOption.ExportTexturesSubFolder)))
                {
                    TextureExporter.ExportToFile(texFullPath, tex);
                }
            }

            exporter.Model             = model;
            exporter.Skeleton          = skeleton;
            exporter.FixBoneForBlender = option.HasFlag(ModelExportOption.FixBoneForBlender);
            exporter.IsNegYAxisForward = option.HasFlag(ModelExportOption.NegYAxisForward);
            exporter.IsYAxisUp         = option.HasFlag(ModelExportOption.YAxisUp);
            exporter.IsLargerSize      = option.HasFlag(ModelExportOption.LargerSize);
            exporter.IsDiffuseOnly     = option.HasFlag(ModelExportOption.ExportDiffuseOnly);
            exporter.Export(path);
        }
示例#2
0
 public static void ExportToFile([NotNull] string path, [NotNull] Metamesh model,
                                 [CanBeNull] Skeleton skeleton, ModelExportOption option = 0)
 {
     if (path.EndsWith(".obj", StringComparison.OrdinalIgnoreCase))
     {
         ExportToFile <WavefrontExporter>(path, model, skeleton, option);
     }
     else if (path.EndsWith(".dae", StringComparison.OrdinalIgnoreCase))
     {
         ExportToFile <ColladaExporter>(path, model, skeleton, option);
     }
     else
     {
         throw new FormatException("Unsupported export format");
     }
 }
示例#3
0
 private static string GetTextureFormat(TextureFormat format, ModelExportOption option)
 {
     return(MaterialExporter.GetBestTextureFormat(format, (MaterialExporter.MaterialExportOption)option));
 }