识别BufferGeometry边

时间:2017-05-24 17:10:52

标签: three.js

我从.obj& .mtl个文件。它看起来像这样:

bag

我在这里想要实现的是,我希望能够识别包上的每一面,以便我可以单独更改每一面的颜色。

我检查了该对象,它包含以下内容:

THREE.Group

我试图创建一系列独特颜色的材料,然后像这样应用它们:

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;

但它看起来像是这样:

coloured bag

所以只有三种颜色适用于它。我使用的模型是从Blender导出的,所以我在.obj& .mtl个文件和.mtl文件中只包含三种材料。

那么如何获取和更新每一方呢?

修改 @pailhead 我在Blender中检查了这个物体,据我所知,每个方面都应该是独一无二的。这是对象的编辑视图:

edit view of the bags

所以我应该可以在每一侧使用不同的材料然后对吗?

编辑2

我很困惑这里发生了什么。我已经将袋子的边缘与它的一侧合并,以便为较大的侧面创建一侧。应用相同的材​​料和颜色,我得到了这个:enter image description here

每个把手下方的一侧只有一侧 - 为什么我会出现两种不同的颜色?

1 个答案:

答案 0 :(得分:1)

您尝试将六种不同的材质应用于模型,结果只看到了三种。

如果您决定需要提供7种不同的材料,或者12种甚至2种材料,会发生什么?应该描述该模型是否具有3个不同侧面的信息" 。或者6或9在.obj文件中,无论你使用three.js申请了多少种不同的材料,它都不会改变。

是否可以安全地假设此特定对象仅包含足够的信息来区分三个不同的面孔?我这么说。

这意味着您需要创建一个不同的模型来描述不同的材料关系。回到搅拌机,分配更多的ids,或将网格分成两侧"并且您将拥有可以使用的逻辑实体。

否则,您可以从几何体中提取子网格。这很复杂,但你可以建立一个允许你走路的结构。然后,您可以设置某些规则的阈值,以确定边界应该在哪里(例如,提取距离+ Y轴小于45度的所有内容,并连接到面563)。