【发布时间】:2017-06-13 14:05:51
【问题描述】:
我想加载引用多个cube_*.mtl 文件的cube.obj 文件,这些文件又使用纹理图像*.png (all resources)。加载多个 mtl 而不是一个的原因是能够动态加载具有相同几何形状但不同材质的对象。
我找不到这样的示例,因此我尝试通过加载所有 mtl、创建 MultiMaterial 和加载 obj 来混合 MultiMaterial(is no longer supported by threejs) 文档和 webgl_loader_obj_mtl 中的示例:
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)
我做错了什么以及如何正确地做到这一点?
【问题讨论】:
标签: javascript three.js