簡體   English   中英

紋理映射過程后如何合並兩個 .obj 文件?

[英]How to merge two .obj files after texture mapping process?

在 3D 網格上應用紋理后,會生成三個文件(包括一個 .obj、.mtl 和一個 atlas 文件)。 我已經在 2 個對象上映射了紋理,現在我想將這些對象合並在一起,但我不知道如何合並它們的文件。 有什么方法(不是非免費工具)嗎?

單對象波前 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 

文件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 

合並:

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

File18個頂點,因此File2f中的每個頂點索引都增加了8 我手動完成了整個示例(包括 File1,2),所以希望我沒有犯一些愚蠢的錯誤,但是預覽還可以,所以看起來不是這樣。

預習

如果你想消除重復條目(空間和速度),那么你需要為每個表重新索引表並使用它而不是僅僅添加......

非常感謝 Spektre,您的解決方案適用。 對於 Mtl 文件,我們可以將逐行的 Mtl 文件集成到一個唯一的 Mtl 文件中,並在其面記錄之前打印每種材料的名稱。 對於解析 Obj 文件, libobj可能是一個有用的庫。 合適的教程還解釋了解決方案的分步過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM