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