我强烈建议使用一些 ASCII 交换格式,有很多我通常使用这些:
-
*.x DirectX 对象(它是 C++ 源代码)
这个最容易实现!!!但是能够处理它们的工具并不多。如果您不想花太多时间编码,那么这是正确的选择。只需从任何 *.x 文件中复制模板(在开始时)即可开始。
here some specs
-
*.iges 在大多数 CAD/CAM 平台(包括 Catia)上通用且可导入
这个有点复杂,但出于出口目的,它并没有那么糟糕。它支持像+,-,&,^ 这样的音量操作,这些操作非常难要正确实施,但您不必使用它们:)
-
*.dxfAutoCAD 交换格式
这个比IGES还要复杂。我不建议使用它
-
*.acAC3D
我第一次看到这个是在飞行装备中。
here some specs
乍一看这很容易,但子对象的实现确实很棘手。除非你使用它,否则应该没问题。
这种方法很容易在记事本中验证或通过加载到某些 3D 模型查看器中进行验证。选择一个最适合您的需求并将save/load 函数编码到您的应用程序内部模型class/struct。这样,您将与其他软件兼容,并消除创建“几乎已知”二进制格式(如 3ds、...
在你的情况下,我会使用 IGES(初始图形交换规范)
对于导出,您不需要实现所有几个基本形状,因此不会太困难。我编码的进口商要复杂得多。我的 IGES 加载器类是关于 C++ 的 30KB 源代码查看 here 了解更多信息
您没有提供有关您的 3D 网格模型结构和功能的任何信息
比如你使用什么原语,你的对象是简单的还是在骨架层次结构中,你是否使用纹理等等......所以无法回答
无论如何,导出通常看起来像这样:
- 创建目标文件格式的标题和结构
-
如果格式有任何目录结构,填写并写入(IGES)
对于子对象不要忘记添加变换矩阵...
编写您需要的块(点列表、面列表、法线...)
使用 ASCII 格式,您可以在字符串变量中执行此操作,以便轻松插入或修改。在内存中做所有事情并在最后将整个事情写入文件,这很快,并且还增加了使用内存而不是文件的能力。如果您想将多个文件打包到单个包文件(如 *.pak)或通过 IPC 或 LAN ...
发送/接收文件,这将非常方便
[Edit1] 更多关于 IGES 的信息
fileformat specs
我从这个 pdf 中学到了 IGES ...不知道从哪里得到它,但这是我今天在 google 中找到的第一个有效链接。我相信那里也有一些非注册链接。大约 13.7 MB,原名IGES5-3_forDownload.pdf。
win32 viewer
这是免费的 IGES 查看器。我不喜欢界面和处理,但它的工作原理。有必要有功能查看器来测试你的...
examples
这里有许多实体的许多教程文件,有 3 个子链接 (igs,peek,gif),您可以在其中以更多方式查看示例文件以便更好地理解。
导出到 IGES
您没有提供有关您的 3D 网格内部结构的任何信息,因此我无法帮助导出。导出方式有很多种,因此请选择最接近您的 App 3D 网格表示的一种。例如,您可以使用:
- 点云
- 旋转表面
- 矩形 (QUAD) 曲面
- 边界线表示(非实线)
- 修剪表面等等...