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); }
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"); } }
private static string GetTextureFormat(TextureFormat format, ModelExportOption option) { return(MaterialExporter.GetBestTextureFormat(format, (MaterialExporter.MaterialExportOption)option)); }