使用python组合多个.obj文件



我想使用python组合几个.obj文件。我的数据结构采用以下形式。例如,在这里,我为每个值设置3个值,即垂直-v、顶点法线vn和面-f;

文件1.obj

v -4.56 8.89 1617.5
v -7.92 9.21 1217.33
v -5.71 9.97 1617.58
vn 0.95 0.15 0.23
vn 0.97 -0.21 0.035
vn 0.19 -0.62 -0.75
f 1//1 2//2 3//3
f 1//1 3//3 4//4
f 13//13 14//14 9//9

文件2.obj

v -54.22 61.67 1604.59
v -54.36 62.53 1605.06
v -53.79 62.06 1605.55
vn -0.36 0.16 -0.15
vn -0.27 -0.46 -0.79
vn 0.58 -0.87 -0.06
f 216//216 182//182 162//162
f 226//226 182//182 216//216
f 182//182 226//226 218//218

我遵循了另一篇关于堆栈溢出的文章(这里(进行组合,但我并没有真正了解如何处理顶点法线数据。

我的组合文件,像这样;

组合.obj

v -4.56 8.89 1617.5
v -7.92 9.21 1217.33
v -5.71 9.97 1617.58
v -54.22 61.67 1604.59
v -54.36 62.53 1605.06
v -53.79 62.06 1605.55
vn 0.95 0.15 0.23
vn 0.97 -0.21 0.035
vn 0.19 -0.62 -0.75
vn -0.36 0.16 -0.15
vn -0.27 -0.46 -0.79
vn 0.58 -0.87 -0.06
f 1//1 2//2 3//3
f 1//1 3//3 4//4
f 13//13 14//14 9//9
f 219//219 185//185 165//165 << ----
f 229//229 185//185 219//219 << ----
f 185//185 229//229 221//221 << ---- only these faces were manipulated(added 3, according to the description in the link)

我没有改变顶点和法线,只是根据帖子改变了面。结果与预期不符。如果有任何想法/建议,我们将不胜感激。

步骤1:检查&更正原始OBJ文件:

确保原始OBJ文件有效,并在需要时对其进行修复。Wavefront OBJ文件格式的良好文档可以在维基百科或此处找到。

例如,可能需要手动或通过脚本(例如Python和PyWavefront(、3D编辑器(如Blender(或3D转换/清理工具(如MeshLab(自动修复/删除具有无效索引的面、删除重复项、检查顶点格式等。

文件1b.obj:

v -4.56 8.89 1617.5
v -7.92 9.21 1217.33
v -5.71 9.97 1617.58
vn 0.95 0.15 0.23
vn 0.97 -0.21 0.035
vn 0.19 -0.62 -0.75
f 1//1 2//2 3//3
#f 1//1 3//3 4//4 # invalid indices
#f 13//13 14//14 9//9 # invalid indices

文件2b.obj:

v -54.22 61.67 1604.59
v -54.36 62.53 1605.06
v -53.79 62.06 1605.55
vn -0.36 0.16 -0.15
vn -0.27 -0.46 -0.79
vn 0.58 -0.87 -0.06
# indices changed like this: 162 -> 1, 182 -> 2, 216 -> 3, 218 -> 4, 226 -> 5
f 3//3 2//2 1//1
#f 5//5 2//2 3//3 # invalid indices
#f 2//2 5//5 4//4 # invalid indices

步骤2:合并多个OBJ文件:

只需手动编辑文本,或使用脚本/工具,或将它们逐一导入三维编辑器,然后将它们重新导出到一个组合文件中,即可组合原始文件中的对象。

结果.obj:

# from File1b.obj
v -4.56 8.89 1617.5
v -7.92 9.21 1217.33
v -5.71 9.97 1617.58
# from File2b.obj
v -54.22 61.67 1604.59
v -54.36 62.53 1605.06
v -53.79 62.06 1605.55
# from File1b.obj
vn 0.95 0.15 0.23
vn 0.97 -0.21 0.035
vn 0.19 -0.62 -0.75
# from File2b.obj
vn -0.36 0.16 -0.15
vn -0.27 -0.46 -0.79
vn 0.58 -0.87 -0.06

# from File1b.obj
o MyObject1
f 1//1 2//2 3//3
# from File2b.obj -> offset of 3 added to all indices
o MyObject2
f 6//6 5//5 4//4
# or merged into one object:
#o MyObjectMerged1
#f 1//1 2//2 3//3
#f 6//6 5//5 4//4

注意:这个答案试图从最初的问题中解决特定的问题,并忽略了提到的Python脚本的特定方面,因为没有给出可复制的例子


相关内容

  • 没有找到相关文章

最新更新