我正在编写Wavefront obj模型文件的解析器,但是有一些不规则的情况我不确定该如何处理。
据我所知,一个网格可以使用“g”命令分成多个组,并且每个组可以使用“usemtl”命令分配材质。
因此,理想的文件应该像这样:
g group1
usemtl material1
//vertices
//UV coords
//faces
g group2
usemtl material2
//vertices
//UV coords
//faces
etc....
然而,在我下载的一些obj文件(来自Turbosquid等地方),我看到一个单一的组包含多个“usemtl”,如下所示:
g group1
usemtl material1
//vertices, faces, etc
usemtl material2
//vertices, faces, etc
g group2
usematerial material3
//vertices, faces, etc
如果组内可以有多个材料,那么创建组的意义何在?
这些文件是否被认为是“非标准”或者是错误的?
我是否应该基于共享材料而不是共享组来分组面?
如果组内有多个材料,将会使我的代码变得更加复杂。比如,假设我需要在一个三角形/面的组中生成一组具有某种材料的 N 个随机样本。如果每个组只有一个材料,我只需查找该组中的三角形并生成样本即可。但是如果该组包含一些带正确材料的三角形和一些没有带的,则除了检查组之外,还必须检查材料以生成正确的样本。这只是其中一个示例,还有其他情况也会出现这个问题。