在运行时将网格转换为 stl/obj/fbx [关闭]

Posted

技术标签:

【中文标题】在运行时将网格转换为 stl/obj/fbx [关闭]【英文标题】:Convert mesh to stl/obj/fbx in runtime [closed] 【发布时间】:2019-01-01 13:41:43 【问题描述】:

我正在寻找一种在运行时将网格导出为 stl/obj/fbx 格式并将其保存在 android 手机的本地文件中的方法。

我该怎么做?如果有插件,我愿意使用(免费/付费)。

【问题讨论】:

【参考方案1】:

这真的很复杂,因为您必须阅读每种格式(stl/obj/fbx)的规范并理解它们才能自己制作。幸运的是,已经有很多插件可用于将 Unity 网格导出到 stl、obj 和 fbx。

FBX

UnityFBXExporter 用于在运行时将 Unity 网格导出到 fbx。

public GameObject objMeshToExport;

void Start()

    string path = Path.Combine(Application.persistentDataPath, "data");
    path = Path.Combine(path, "carmodel"+ ".fbx");

    //Create Directory if it does not exist
    if (!Directory.Exists(Path.GetDirectoryName(path)))
    
        Directory.CreateDirectory(Path.GetDirectoryName(path));
    

    FBXExporter.ExportGameObjToFBX(objMeshToExport, path, true, true);


OBJ

对于 obj,使用ObjExporter

public GameObject objMeshToExport;

void Start()

    string path = Path.Combine(Application.persistentDataPath, "data");
    path = Path.Combine(path, "carmodel" + ".obj");

    //Create Directory if it does not exist
    if (!Directory.Exists(Path.GetDirectoryName(path)))
    
        Directory.CreateDirectory(Path.GetDirectoryName(path));
    

    MeshFilter meshFilter = objMeshToExport.GetComponent<MeshFilter>();
    ObjExporter.MeshToFile(meshFilter, path);


STL

您可以使用pb_Stl 插件进行 STL 格式。

public GameObject objMeshToExport;

void Start()

    string path = Path.Combine(Application.persistentDataPath, "data");
    path = Path.Combine(path, "carmodel" + ".stl");

    Mesh mesh = objMeshToExport.GetComponent<MeshFilter>().mesh;

    //Create Directory if it does not exist
    if (!Directory.Exists(Path.GetDirectoryName(path)))
    
        Directory.CreateDirectory(Path.GetDirectoryName(path));
    


    pb_Stl.WriteFile(path, mesh, FileType.Ascii);

    //OR
    pb_Stl_Exporter.Export(path, new GameObject[]  objMeshToExport , FileType.Ascii);

【讨论】:

感谢您的建议。从来没想过在 Github 上找插件……今天晚些时候我会尝试所有这些插件。 我想开发一个 Android 应用程序(用于学校项目),允许用户设计自己的手机壳,然后生成 STL/OBJ 格式的 3D 几何文件,为 3D 打印做好准备。 (对不起,我没有在问题中说清楚。)这就是我需要一个插件来在 Android 应用程序运行时将游戏对象/网格导出到 stl/obj/fbx 文件的主要原因。我在 void Start() 中尝试了 pb_Stl 和 UnityFBXExporter (您建议的代码)。但是当我打开我的应用程序,然后我打开内部存储。我发现什么都没有创建。 我想知道这些导出代码是否可以在其他函数中实现,而不是 void Start()。因为我想要实现的是仅在单击特定按钮而不是应用程序启动时生成stl文件。 你所有的 cmets 都是不必要的。您看到的代码只是示例用法,如果您将它们放在非Start 函数中,则可以随时使用或调用它们。在保存模型之前,您可能需要调用Directory.ExistsDirectory.CreateDirectory,否则会遇到this 问题。还通过将“.fbx”作为所有它们的扩展名进行了错字。现在,修好了。见编辑。您可以检查保存是否使用File.Exists 或使用File.ReadAllBytes 读取文件

以上是关于在运行时将网格转换为 stl/obj/fbx [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在运行时将对象转换为动态类型

在运行时将android颜色字符串转换为int [重复]

在运行时将android颜色字符串转换为int [重复]

在运行时将 AMD 模块转换为 ES6?

在运行时将类型 id 的对象转换为未知类型

C# 在运行时将 Enumerable.Iterator 强制转换为已知 List<Object>