在运行时将网格转换为 stl/obj/fbx [关闭]
Posted
技术标签:
【中文标题】在运行时将网格转换为 stl/obj/fbx [关闭]【英文标题】:Convert mesh to stl/obj/fbx in runtime [closed] 【发布时间】:2018-03-25 19:08:21 【问题描述】:我正在寻找一种在运行时将网格导出为 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.Exists
和Directory.CreateDirectory
,否则会遇到this 问题。还通过将“.fbx”作为所有它们的扩展名进行了错字。现在,修好了。见编辑。您可以检查保存是否使用File.Exists
或使用File.ReadAllBytes
读取文件以上是关于在运行时将网格转换为 stl/obj/fbx [关闭]的主要内容,如果未能解决你的问题,请参考以下文章