我正在尝试使用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也发生了同样的情况。可能是什么问题呢。
答案 0 :(得分:1)
使用BoxBufferGeometry
时,生成的几何图形将自动定义groups数据,这是使用多种材料的前提。我高度假设,由于加载cube.glb
而产生的几何图形没有任何组,因此无法应用多种材料。
three.js R108