Sun*_*724 5 3d graphics rendering polygon wavefront
所以我正在为wavefront obj模型文件编写一个解析器,并且有一些我不确定如何处理的不规则.
因此,根据我的阅读,可以使用'g'命令将网格分成组,并使用'usemtl'命令将材质分配给每个组
所以一个理想的文件看起来像这样:
g group1
usemtl material1
//vertices
//UV coords
//faces
g group2
usemtl material2
//vertices
//UV coords
//faces
etc....
Run Code Online (Sandbox Code Playgroud)
但是在我下载的一些obj文件中(从Turbosquid这样的地方),我看到一个组包含多个"usemtl",如下所示:
g group1
usemtl material1
//vertices, faces, etc
usemtl material2
//vertices, faces, etc
g group2
usematerial material3
//vertices, faces, etc
Run Code Online (Sandbox Code Playgroud)
因此,如果每组可以有多种材料,那么群体的重点是什么?
这些文件被认为是"非标准"还是破损?
我应该改为基于共享材料而不是共享组对面部进行分组吗?
每组有多种材料会使我的许多代码复杂化(例如 - 假设我必须在一组具有特定材料的三角形/面上生成一组N个随机样本.如果每组只有一种材料,我可以查找该组中的三角形并生成样本.但是如果该组包含一些具有正确材料的三角形而一些没有,则我必须在组检查之前进行一些奇怪的材料检查以生成正确的样本.这是只是一个例子 - 还有其他一些问题也成了问题)
小智 3
对象网格不仅可以分组为组项 (g),还可以分组为对象 (o) 和平滑区域 (s)。最简单的方法是使面引用 usemtl 指定的当前材质,或者仅按 usemtl 分组