Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 确定缓冲几何体的侧面_Three.js - Fatal编程技术网

Three.js 确定缓冲几何体的侧面

Three.js 确定缓冲几何体的侧面,three.js,Three.js,我正在从.obj和.mtl文件加载对象。看起来是这样的: 我想在这里实现的是,我想能够识别袋子上的每一面,这样我就可以分别改变每一面的颜色 我检查了对象,它包含以下内容: 我尝试创建一系列独特颜色的材料,并将其应用如下: var materials = [ new THREE.MeshPhongMaterial({color: 0x80ffaa}), // Light green new THREE.MeshPhongMaterial(

我正在从
.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
文件中,它只应用了三种材料

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

编辑 @桶头 我在Blender中检查过这个物体,据我所知,每一面都应该是独一无二的。以下是对象的编辑视图:

所以我应该可以在每一面涂上不同的材料,对吗

编辑2

我对这里发生的事感到困惑。我已经将袋子的边缘与侧面合并了,这是一个,为更大的侧面各创建一个侧面。使用相同的材料和颜色,我得到以下结果:


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

您尝试在模型上应用六种不同的材质,结果只看到三种

如果您决定需要提供7种不同的材料,或者12种甚至2种,会发生什么?描述此模型是否有3个“不同面”或6或9的信息位于.obj文件中,无论使用three.js应用多少种不同的材质,该文件都不会更改

可以安全地假设这个特定的obj只包含足够的信息来区分三个不同的面吗?我可以这么说

这意味着您需要创建不同的模型,以不同的方式描述材质关系。返回blender,分配更多ID,或者将网格拆分为“边”,这样您就可以使用逻辑实体


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

您如何知道模型包含您想要的边的描述,而不是其他方式?例如,它只能分为三个面,而不是6个面或任何你期望的面。你需要在blender中处理这个问题,也许可以导出6种不同的东西,并按照你想要的方式命名。我不确定你是如何得出这样的结论,即这些边是独特的?它们是否作为单独的实体存在于blender中?我只有使用3ds max json导出器的经验。同一组网格可以根据应用的材质的不同而导出,但不能确定它在blender中的工作方式。另外,从逻辑角度考虑。你看到那些使角看起来圆的面了吗。它们和其他东西一样是三角形。这就是为什么当你说“side”时,它是模棱两可的。谢谢@pailhead。问题实际上与您建议的对象本身有关。要为每一侧指定不同的材质,我需要从所需的两侧创建对象。例如,前、后、右侧和左侧在网格中被视为各自的单独对象。我不记得我是怎么做到的,但我会在这里找到问题并链接到它+1.我需要你的帮助。