Javascript Three.js OBJExporter-导出多个物料?

Javascript Three.js OBJExporter-导出多个物料?,javascript,three.js,.obj,Javascript,Three.js,.obj,我的场景中有一个网格,我正试图使用Three.js附带的脚本导出到OBJ。我的网格应用了多种材质,这意味着每个面上都有不同的materialIndex 这是一个网格,使用THREE.MultiMaterial应用了多种材质。根据我不完全理解的“顶点纹理坐标索引”下的内容,它说: (可选)纹理坐标索引可用于在定义面时指定纹理坐标 格式 f v1/vt1 v2/vt2 v3/vt3 在导出的.obj数据中,该部分看起来就像一个增量计数器: f 1/1/1 2/2/2 3/3/3 f 4/4/4

我的场景中有一个网格,我正试图使用Three.js附带的脚本导出到OBJ。我的网格应用了多种材质,这意味着每个面上都有不同的
materialIndex

这是一个网格,使用
THREE.MultiMaterial
应用了多种材质。根据我不完全理解的“顶点纹理坐标索引”下的内容,它说:

(可选)纹理坐标索引可用于在定义面时指定纹理坐标

格式

f v1/vt1 v2/vt2 v3/vt3
在导出的.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重新导入该字符串,然后对其应用多重材质时,它只显示一种材质


我试图解开整个谜团,还有很多未知的东西。我不关心材质定义本身,我只关心哪个面上有材质索引。
.obj
格式能否单独保存每个面的多纹理对象的材质索引?

是的,
.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
在本例中,
1
3
是我创建的任意标识符。它们可以是任何字符串名称


为了给材质提供一些直观的定义,您需要包括一个
.mtl
文件以及
.obj
文件,就像这样。但是,要使面拥有自己的材质索引,不需要包含该文件。

是的,
.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
在本例中,
1
3
是我创建的任意标识符。它们可以是任何字符串名称

为了给材质提供一些直观的定义,您需要包括一个
.mtl
文件以及
.obj
文件,就像这样。但是,要使面拥有自己的材质索引,不需要包含该文件