【问题标题】:How can I create a 3D model file from geometric shapes?如何从几何形状创建 3D 模型文件?
【发布时间】:2014-07-14 14:30:00
【问题描述】:

我正在编写一个程序,该程序将基于简单几何形状(例如矩形棱柱和圆柱体)在 3 维空间中具有已知坐标输出 3D 模型文件。例如,想象一下创建巨石阵的 3D 模型。 this question 建议 OBJ 文件是最容易生成的,但我正在努力寻找一个好的教程或易于使用的库来这样做。

任何人都可以

(1) 逐步描述如何创建一个简单的文件或 (2) 向我指出一个描述如何做到这一点的教程

注意事项: * 使用基于 GUI 的程序来绘制此类文件对我来说不是一个选项 * 我之前没有 3D 建模经验 * WRL 或 DAE 等其他格式也适用于我

编辑:

我不需要使用纹理,只需在 3D 空间中放置简单几何形状的组合。

【问题讨论】:

    标签: geometry 3d-modelling 3d-model


    【解决方案1】:

    我强烈建议使用一些 ASCII 交换格式,有很多我通常使用这些:

    1. *.x DirectX 对象(它是 C++ 源代码)

      这个最容易实现!!!但是能够处理它们的工具并不多。如果您不想花太多时间编码,那么这是正确的选择。只需从任何 *.x 文件中复制模板(在开始时)即可开始。

      here some specs

    2. *.iges 在大多数 CAD/CAM 平台(包括 Catia)上通用且可导入

      这个有点复杂,但出于出口目的,它并没有那么糟糕。它支持像+,-,&,^ 这样的音量操作,这些操作非常难要正确实施,但您不必使用它们:)

    3. *.dxfAutoCAD 交换格式

      这个比IGES还要复杂。我不建议使用它

    4. *.acAC3D

      我第一次看到这个是在飞行装备中。

      here some specs

      乍一看这很容易,但子对象的实现确实很棘手。除非你使用它,否则应该没问题。

    这种方法很容易在记事本中验证或通过加载到某些 3D 模型查看器中进行验证。选择一个最适合您的需求并将save/load 函数编码到您的应用程序内部模型class/struct。这样,您将与其他软件兼容,并消除创建“几乎已知”二进制格式(如 3ds、...

    在你的情况下,我会使用 IGES(初始图形交换规范)

    对于导出,您不需要实现所有几个基本形状,因此不会太困难。我编码的进口商要复杂得多。我的 IGES 加载器类是关于 C++30KB 源代码查看 here 了解更多信息

    您没有提供有关您的 3D 网格模型结构和功能的任何信息

    比如你使用什么原语,你的对象是简单的还是在骨架层次结构中,你是否使用纹理等等......所以无法回答

    无论如何,导出通常看起来像这样:

    1. 创建目标文件格式的标题和结构
    2. 如果格式有任何目录结构,填写并写入(IGES)

      对于子对象不要忘记添加变换矩阵...

    3. 编写您需要的块(点列表、面列表、法线...)

    使用 ASCII 格式,您可以在字符串变量中执行此操作,以便轻松插入或修改。在内存中做所有事情并在最后将整个事情写入文件,这很快,并且还增加了使用内存而不是文件的能力。如果您想将多个文件打包到单个包文件(如 *.pak)或通过 IPCLAN ...

    发送/接收文件,这将非常方便

    [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) 曲面
    • 边界线表示(非实线)
    • 修剪表面等等...

    【讨论】:

    • 是否有免费/简单的工具可以将这些 ASCII 格式转换为我提到的格式之一?
    • @ChaseMedallion 我不使用这些,所以我不知道,但大多数 3D 网格转换器可以导入 IGES 和 DXF 并将它们导出为常见的文件格式,如 3ds,......我认为有一些免费的 AC3D那里的建模工具也可以做到这一点。如果你绑定特定的文件格式直接实现(当然还有我之前提到的不兼容风险)
    • 我很想按照您的建议使用 IGES。您是否介意使用绘制 2 个位于 3D 空间中的圆柱体的示例 IGES 文件更新您的帖子(使用 cmets/explanation)?提供的 wikipedia 链接仅描述了如何绘制 2D 形状,对初学者并没有太大帮助。或者,指向教程的链接会有所帮助。
    • @ChaseMedallion added [edit1] ,是的,Wiki 主要是针对非常特定的领域的废话,仅可用于全球知名的知识。如果您不能对我发表评论,请下载该 iges5-3 pdf,我会将其发布在某个地方
    猜你喜欢
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多