我想要加载
我没有找到这样的示例,因此我尝试混合 MultiMaterial(已不再由Three.js支持) 文档和 webgl_loader_obj_mtl 示例,通过加载所有mtl、创建
但是这并不起作用,会抛出异常:
我应该怎样做才能正确地完成任务?请指出我的错误并帮我改正。
cube.obj
文件,该文件引用了多个cube_*.mtl
文件,而这些文件又使用纹理图像*.png
(所有资源)。之所以加载多个mtl而不是一个,是为了能够动态加载具有相同几何形状但不同材质的对象。我没有找到这样的示例,因此我尝试混合 MultiMaterial(已不再由Three.js支持) 文档和 webgl_loader_obj_mtl 示例,通过加载所有mtl、创建
MultiMaterial
并加载obj来实现。var resources = 'cube/';
var materialsToLoad = [
'cube_red.mtl',
'cube_green.mtl',
'cube_blue.mtl'
];
var loadedMaterials = [];
var mtlLoader = new THREE.MTLLoader();
mtlLoader.setPath(resources);
for (var i = 0; i < materialsToLoad.length; i++) {
mtlLoader.load(materialsToLoad[i], function(materials) {
materials.preload();
loadedMaterials.push(materials);
});
}
var multi = new THREE.MultiMaterial(loadedMaterials);
var objLoader = new THREE.OBJLoader();
objLoader.setPath(resources);
objLoader.setMaterials(multi); // #1
objLoader.load('cube.obj', function (object) {
scene.add(object);
});
但是这并不起作用,会抛出异常:
Uncaught TypeError: this.materials.create is not a function
at THREE.OBJLoader.parse (OBJLoader.js:684)
at OBJLoader.js:50
at XMLHttpRequest.<anonymous> (three.min.js:619)
我应该怎样做才能正确地完成任务?请指出我的错误并帮我改正。