我从.obj
& .mtl
个文件。它看起来像这样:
我在这里想要实现的是,我希望能够识别包上的每一面,以便我可以单独更改每一面的颜色。
我检查了该对象,它包含以下内容:
我试图创建一系列独特颜色的材料,然后像这样应用它们:
var materials = [
new THREE.MeshPhongMaterial({color: 0x80ffaa}), // Light green
new THREE.MeshPhongMaterial({color: 0xe60000}), // Red
new THREE.MeshPhongMaterial({color: 0xff4dff}), // Pink
new THREE.MeshPhongMaterial({color: 0x3399ff}), // Light blue
new THREE.MeshPhongMaterial({color: 0xac7339}), // Brown
new THREE.MeshPhongMaterial({color: 0x666699}) // Purple
];
var material = new THREE.MeshFaceMaterial(materials)
this.selectedProduct[0]['children'][0].material.materials = materials;
但它看起来像是这样:
所以只有三种颜色适用于它。我使用的模型是从Blender导出的,所以我在.obj
& .mtl
个文件和.mtl
文件中只包含三种材料。
那么如何获取和更新每一方呢?
修改 @pailhead 我在Blender中检查了这个物体,据我所知,每个方面都应该是独一无二的。这是对象的编辑视图:
所以我应该可以在每一侧使用不同的材料然后对吗?
编辑2
我很困惑这里发生了什么。我已经将袋子的边缘与它的一侧合并,以便为较大的侧面创建一侧。应用相同的材料和颜色,我得到了这个:
每个把手下方的一侧只有一侧 - 为什么我会出现两种不同的颜色?
答案 0 :(得分:1)
您尝试将六种不同的材质应用于模型,结果只看到了三种。
如果您决定需要提供7种不同的材料,或者12种甚至2种材料,会发生什么?应该描述该模型是否具有3个不同侧面的信息" 。或者6或9在.obj文件中,无论你使用three.js申请了多少种不同的材料,它都不会改变。
是否可以安全地假设此特定对象仅包含足够的信息来区分三个不同的面孔?我这么说。
这意味着您需要创建一个不同的模型来描述不同的材料关系。回到搅拌机,分配更多的ids,或将网格分成两侧"并且您将拥有可以使用的逻辑实体。
否则,您可以从几何体中提取子网格。这很复杂,但你可以建立一个允许你走路的结构。然后,您可以设置某些规则的阈值,以确定边界应该在哪里(例如,提取距离+ Y轴小于45度的所有内容,并连接到面563)。