.obj文件格式-在不同的数据类型之间交替



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

因为这就是文件格式的设计方式。不需要OBJ中数据的特定顺序,因此每个建模包都以自己的方式编写它。如果你还没有读过这篇文章,下面是对文件格式的简要总结。

也就是说,OBJ格式相当过时,默认情况下不支持动画。它对于在建模工具之间交换静态网格很有用,但除此之外就没什么用了。如果你需要一个更强大和现代的文件格式,我建议你看看Collada格式或FBX。

不是直接回答,但在注释

中将无法读取。

我不使用这种文件格式,但网格分割通常是出于这些原因:

  1. 更方便的管理模型进行编辑

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

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

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

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

现在如何处理分段网格:

  1. 如果您的引擎只支持未分割的模型,那么将所有部件合并在一起

    这将失去分段网格的所有优点。不要忘记在合并

  2. 之前应用子段的变换矩阵。
  3. 或者您可以在模型类中实现网格分割

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

  1. 扫描文件中所有必要的数据块

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

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

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

相关内容

  • 没有找到相关文章

最新更新