【问题标题】:Wavefront OBJ Format -> Groups & usemtl commandWavefront OBJ 格式 -> 组和 usemtl 命令
【发布时间】:2015-08-15 10:20:51
【问题描述】:

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

【问题讨论】:

    标签: graphics 3d rendering polygon wavefront


    【解决方案1】:

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

    【讨论】:

    • 就我而言,我按 usemtl 分组。每个新的“usemtl”关键字都定义了一个与最后一个组同名的新组,并带有一个计数器后缀。效果很好!
    • @Shurbsk 对象和组项有什么区别?
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 2020-02-20
    • 2012-07-14
    • 2013-09-09
    • 2016-08-27
    • 2017-06-27
    • 2019-10-18
    • 2019-01-17
    相关资源
    最近更新 更多