【问题标题】:.obj file format - alternates between different data types.obj 文件格式 - 在不同的数据类型之间交替
【发布时间】:2014-04-28 03:12:15
【问题描述】:

我正在编写一种方法来解析波前 obj 文件中的数据,并且我了解大部分格式,但是有些事情对我来说仍然有点困惑。例如,我希望大多数文件首先列出所有顶点,然后是纹理和法线贴图坐标,然后是面索引。但是,我打开的一些文件在这些不同部分之间交替出现。例如,我拥有的 Venus de Milo 的一个 .obj 文件(在此处获得:http://graphics.im.ntu.edu.tw/~robin/courses/cg03/model/)从顶点 (v) 开始,然后是法线坐标 (vn),然后是面 (f),然后定义更多顶点,法线和面孔再次。为什么文件像这样分成两部分?为什么不预先列出所有顶点?这是否意味着网格有多个段?如果是这样,我该如何处理?

【问题讨论】:

    标签: file graphics geometry mesh .obj


    【解决方案1】:

    不是直接的答案,但在评论中将无法阅读

    我不使用这种文件格式,但网格通常出于以下原因进行分割:

    1. 更轻松地管理模型以进行编辑

    2. 分离具有不同材料或纹理属性的模型部分

      主要是通过减少不必要的材质或纹理切换来加快渲染速度

    3. 如果网格有动态移动的部分,那么它们必须分开

      大多数 3D 网格文件格式还包含每个网格部分的变换矩阵,有些甚至包含骨架层次结构

    现在如何处理分段网格:

    1. 如果您的引擎仅支持未分段模型,则将所有部分合并在一起

      这将失去分段网格的所有优点。不要忘记在合并之前应用子段的变换矩阵

    2. 或者你可以在你的模型类中实现网格分割

      通过添加模型层次结构,变换矩阵,...

    现在如何处理混合模型文件格式:

    1. 扫描文件以获取所有必要的数据块

      • 记住它们是否存在
      • 还将它们的大小和起始地址存储在文件中
      • 并且不要忘记可能存在不止一个相同数据类型的块
    2. 为您需要的所有数据预分配空间

    3. 加载/合并您需要的所有数据

      • 将数据块加载到模型类或将其合并到单个模型中
      • 当然要检查是否所有需要的数据 id 都存在,例如点数与法线数或纹理坐标数匹配...

    【讨论】:

      【解决方案2】:

      因为这是设计文件格式的方式。对 OBJ 中的数据没有特定的排序要求,因此每个建模包都以自己的方式编写它。 Here 是文件格式的一个简要总结,如果你还没有读过的话。

      也就是说,OBJ 格式已经过时并且默认不支持动画。它对于在建模工具之间交换静态网格很有用,但没有太多用处。如果您需要更强大和更现代的文件格式,我建议您查看Collada 格式或FBX

      【讨论】:

        猜你喜欢
        • 2016-05-25
        • 1970-01-01
        • 2020-02-23
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多