【问题标题】:Convert mesh to stl/obj/fbx in runtime [closed]在运行时将网格转换为 stl/obj/fbx [关闭]
【发布时间】:2018-03-25 19:08:21
【问题描述】:

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

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

【问题讨论】:

    标签: c# android unity3d mesh fbx


    【解决方案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 读取文件
    猜你喜欢
    • 2017-03-01
    • 2016-03-11
    • 2019-04-18
    • 2018-07-04
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多