2016-07-06 292 views
1

我在我的場景中有一個網格我試圖用Three.js附帶的the OBJExporter腳本導出到OBJ。我的網格上應用了多種材質,這意味着每個面都有不同的materialIndexThree.js OBJExporter - 導出多種材質?

my mesh

這是一個與施加它使用THREE.MultiMaterial到多種材料齧合。按照.obj specification下的「頂點紋理座標指數」,這點我不完全瞭解,它說:

可選,紋理座標索引可以用來指定紋理定義臉部時座標。

在格式

f v1/vt1 v2/vt2 v3/vt3 

在由the script導出的數據.OBJ,這部分只是看起來像一個遞增計數器:

f 1/1/1 2/2/2 3/3/3 
f 4/4/4 5/5/5 6/6/6 
f 7/7/7 8/8/8 9/9/9 
f 10/10/10 11/11/11 12/12/12 

此外,當我保存導出的字符串.obj文件,然後使用OBJLoader重新導入該文件,然後將MultiMaterial應用於它,它只顯示一種材質。

我試圖解開整個難題,並有很多未知數。我不關心材料定義本身,我只關心哪張臉上有物質索引。單獨的.obj格式能否爲每張臉的多重紋理對象保存材質索引?

回答

0

是的,.obj格式可以支持同一物體上的多種材質。最簡單的方法是添加usemtl調用一組面。喜歡的東西:

usemtl 1 
f 41/153/11 40/154/13 36/155/20 38/156/5 
f 38/157/5 36/158/20 44/159/14 37/160/8 
f 24/161/9 29/162/1 27/163/21 23/164/23 
f 29/165/1 24/166/9 22/167/10 28/168/4 
usemtl 3 
f 55/185/2 54/186/5 51/187/8 56/188/3 
f 51/189/8 53/190/7 50/191/4 56/192/3 
f 54/193/5 49/194/6 53/195/7 51/196/8 
f 55/197/2 52/198/1 49/199/6 54/200/5 
f 49/201/6 52/202/1 50/203/4 53/204/7 

在這種情況下13是我提出了任意標識符。它們可以是任何字符串名稱。

要實際給出一些視覺定義的材料,您需要包括一個.mtl文件連同.obj文件,如this example那樣。但要簡單地讓臉部擁有自己的材質索引,則不需要包含該文件。