Graphics 波前OBJ格式->;小组及;usemtl命令

Graphics 波前OBJ格式->;小组及;usemtl命令,graphics,3d,rendering,polygon,wavefront,Graphics,3d,Rendering,Polygon,Wavefront,所以我正在为波阵面obj模型文件编写一个解析器,有一些不规则的地方我不知道如何处理 因此,根据我的阅读,可以使用“g”命令将网格分解为多个组,并使用“usemtl”命令将材质分配给每个组 因此理想的文件如下所示: g group1 usemtl material1 //vertices //UV coords //faces g group2 usemtl material2 //vertices //UV coords //faces etc.... 然而,在我下载的一些obj文件中(从

所以我正在为波阵面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个随机样本。如果每组只有一个材质,我可以查找该组中的三角形并生成样本。但是如果该组包含一些具有正确材质的三角形,而另一些没有,我必须执行一些奇怪的操作。)在组检查的基础上进行Material检查以生成正确的样本。这只是一个示例-还有其他一些示例也存在此问题)

Obj网格不仅可以分组为组项目(g),还可以分组为对象(o)和平滑区域(s)也是。最简单的方法是使面引用由usemtl指定的当前材质,或者只是按usemtl分组

在我的例子中,我按usemtl分组。每个新的“usemtl”关键字定义了一个新组,其名称与上一个带计数器的组相同。效果很好!@Shurbsk对象和组项之间有什么区别?