我有一个函数,它以这种方式从.obj文件中加载对象:
function loadObject(obj, mtl, clr, opc, px, py, pz, rx, ry, rz, cs, rs, name) {
switch(mtl) {
case 'transparent':
var material = new THREE.MeshLambertMaterial({
color: clr,
transparent: true,
opacity: opc,
});
break;
case 'web':
var material = createElementMaterial('img/web.png');
break;
case 'basic':
var material = new THREE.MeshBasicMaterial({ color: clr });
break;
default:
var material = new THREE.MeshLambertMaterial({color: clr, transparent: true, opacity: opc});
break;
}
var objLoader = new THREE.OBJLoader();
objLoader.load(obj, function(mesh) {
globalobject = mesh;
globalobject.name = name;
mesh.traverse(function(node) {
if(node instanceof THREE.Mesh) {
node.castShadow = cs;
node.receiveShadow = rs;
node.material = material;
node.position.x = px;
node.position.y = py;
node.position.z = pz;
node.rotation.x = rx;
node.rotation.y = ry;
node.rotation.z = rz; }
});
scene.add(mesh);
});
}
现在,我需要命名每个加载的对象,并使用getObjectByName()控制其属性,如不透明度等。对象被加载并遵循函数规则,但是当我加载一个对象并尝试通过名称访问它时,我从控制台得到一个未定义的输出,并且当我通过直接键入向控制台发送查询时可以打印该对象。因此,从另一方面来说,我正在寻找一种方法,允许我从.obj文件访问每个加载的对象。
https://stackoverflow.com/questions/51527961
复制相似问题