ThreeJS GLTFLoader材料阵列

时间:2019-09-17 06:50:26

标签: javascript html three.js

我正在尝试使用GLTFLoader加载模型,并使用材质数组为对象(多维数据集)的每个面应用不同的颜色。但这是行不通的。

            var materials = [ new THREE.MeshPhongMaterial( {color: 0x552811,specular: 0x222222,shininess: 25}),
                              new THREE.MeshPhongMaterial( {color: 0x552811,specular: 0x222222,shininess: 25})];

            loader = new GLTFLoader();
            loader.load( "./Model/cube.glb", function ( gltf ) {
                 var geometry = gltf.scene.children[ 2 ].geometry;
                 mesh = new THREE.Mesh( geometry, materials );
                 scene.add( mesh );
            } );

如果我将材质数组更改为单个材质对象,则可以正常工作,例如

     mesh = new THREE.Mesh( geometry, materials[0] );

我认为问题在于将网格材料赋予网格,但是如果手动创建网格并将阵列作为材料,那么它也可以工作。

var geometry = new THREE.BoxBufferGeometry( 10, 10, 10 );
var mesh = new THREE.Mesh( geometry,materials);
scene.add(mesh);

问题仅在于使用GLTFLoader加载网格并尝试应用材质阵列时。 OBJLoader也发生了同样的情况。可能是什么问题呢。

1 个答案:

答案 0 :(得分:1)

使用BoxBufferGeometry时,生成的几何图形将自动定义groups数据,这是使用多种材料的前提。我高度假设,由于加载cube.glb而产生的几何图形没有任何组,因此无法应用多种材料。

three.js R108