我正在编写一个方法来解析wavefront obj文件中的数据,我理解大部分格式,但有些事情对我来说仍然有点混乱。例如,我希望大多数文件首先列出所有顶点,然后是纹理和法线贴图坐标,然后是面部索引。但是,我打开的一些文件在这些不同的部分之间交替。例如,我对Venus de Milo的一个.obj文件(在这里获得:http://graphics.im.ntu.edu.tw/~robin/courses/cg03/model/)以顶点(v)开始,然后是法线坐标(vn),然后是面(f),然后定义更多顶点,法线和面孔。为什么文件分为两部分?为什么不预先列出所有顶点?这是否意味着网格有多个片段?如果是这样,我该如何处理?
答案 0 :(得分:1)
不是直接答案,但在评论
中将无法阅读我不使用此文件格式,但网格细分通常是出于以下原因:
更轻松地管理模型进行编辑
分离具有不同材质或纹理属性的模型部分
主要是通过减少不必要的材料或纹理切换来加速渲染
如果网格有动态移动部分,那么它们必须分开
大多数3D网格文件格式还包含每个网格零件的变换矩阵,甚至还包含骨架层次结构
现在如何处理分段网格:
如果您的引擎仅支持未分段的模型,则将所有部分合并在一起
这将失去分段网格的所有优点。不要忘记在合并之前应用子段的变换矩阵
或者您可以将网格细分实现到模型类
通过添加模型层次结构,转换矩阵,......
现在如何处理混合模型fileformat:
扫描所有必要数据块的文件
为您需要的所有数据预分配空间
加载/合并您需要的所有数据
答案 1 :(得分:1)