如何在纹理映射过程后合并两个.obj文件?

Ali*_*aed 4 c++ 3d image-processing computer-vision

在3D网格上应用纹理后,会生成三个文件(包括.obj,.mtl和atlas文件).我已经在2个对象上映射了纹理,现在我想将这些对象合并在一起,但我不知道如何合并它们的文件.有没有方法(不是非免费工具)?

Spe*_*tre 6

合并单个对象波前obj文件的天真文件相对容易:

  1. 将第一个文件读入内存

    记住每个表的条目数

  2. 将第二个文件追加到内存中(除了面)

  3. 将第二个文件的面附加到内存中

    这是唯一需要改变的东西.所有索引都来自于1您需要将每个表的大小从之前的文件添加到它.例如,如果第一个obj得到10行,v那么这意味着在追加第二个obj后将开始引用它的点11.所以取每个顶点索引并为其添加大小.

    对于你得到的任何信息,例如法线,纹理坐标或者什么都是如此.

  4. 将整个事物保存为单个obj文件

对不起,我不使用材料扩展,所以我不知道格式,如果mtl文件中也需要任何更改(但我不这么认为).

如果你想更新网格(删除不可见的相交部分),那么你需要使用一些几何方法(不是琐碎的问题).

只是为了确定这里的小例子......

文件1:

v -1.0 -1.0 -1.0 
v +1.0 -1.0 -1.0 
v +1.0 +1.0 -1.0 
v -1.0 +1.0 -1.0 
v -1.0 -1.0 +1.0 
v +1.0 -1.0 +1.0 
v +1.0 +1.0 +1.0 
v -1.0 +1.0 +1.0 

f 1 2 3 4 
f 5 6 7 8 
f 1 2 6 5 
f 2 3 7 6 
f 3 4 8 7 
f 4 1 5 8 
Run Code Online (Sandbox Code Playgroud)

文件2:

v -1.0 -1.0 +1.0 
v +1.0 -1.0 +1.0 
v +1.0 +1.0 +1.0 
v -1.0 +1.0 +1.0 
v -2.0 -2.0 +2.0 
v +2.0 -2.0 +2.0 
v +2.0 +2.0 +2.0 
v -2.0 +2.0 +2.0 

f 1 2 3 4 
f 5 6 7 8 
f 1 2 6 5 
f 2 3 7 6 
f 3 4 8 7 
f 4 1 5 8 
Run Code Online (Sandbox Code Playgroud)

合并:

v -1.0 -1.0 -1.0 
v +1.0 -1.0 -1.0 
v +1.0 +1.0 -1.0 
v -1.0 +1.0 -1.0 
v -1.0 -1.0 +1.0 
v +1.0 -1.0 +1.0 
v +1.0 +1.0 +1.0 
v -1.0 +1.0 +1.0 

v -1.0 -1.0 +1.0 
v +1.0 -1.0 +1.0 
v +1.0 +1.0 +1.0 
v -1.0 +1.0 +1.0 
v -2.0 -2.0 +2.0 
v +2.0 -2.0 +2.0 
v +2.0 +2.0 +2.0 
v -2.0 +2.0 +2.0 

f 1 2 3 4 
f 5 6 7 8 
f 1 2 6 5 
f 2 3 7 6 
f 3 4 8 7 
f 4 1 5 8 

f  9 10 11 12 
f 13 14 15 16 
f  9 10 14 13 
f 10 11 15 14 
f 11 12 16 15 
f 12  9 13 16
Run Code Online (Sandbox Code Playgroud)

File1中具有8顶点这样在每个顶点索引f文件2被增加8.我手动完成了整个示例(包括File1,2),所以希望我没有犯一些愚蠢的错误,但预览是好的,所以看起来并非如此.

预习

如果你想消除重复的条目(空间和速度),那么你需要为每个表重建索引表并使用它而不是只添加...