Threejs fbx loader 将 objects 添加到场景,但它们不在 children 数组中
Threejs fbx loader add objects to scene but i they aren't on the children array
按照 threejs.org FBX 加载器示例,我让我的模型加载了这个函数:
this.obj = null;
var loader = new THREE.FBXLoader();
var objs = []
function load_init( object ) {
mixer = new THREE.AnimationMixer( object );
console.log("pushing to objs...");
objs.push(object);
console.log(objs[0]);
object.traverse( function ( child ) {
if ( child.isMesh ) {
//console.log(child)
//console.log(child.material.length)
const oldMat = child.material;
var newMat = new THREE.MeshBasicMaterial();
// if(oldMat.length == undefined)
// {
// console.log(newMat.copy(oldMat));
// child.material = newMat;
// child.material = new THREE.MeshBasicMaterial( {
// color: oldMat.color,
// } );
// }
// else
// {
// for(var i = 0; i < oldMat.length; i++)
// {
// child.material[i] = new THREE.MeshBasicMaterial( {
// color: oldMat[i].color,
// } );
// }
// }
}
} );
object.position.z -= 200;
object.position.y -= 250;
var action = mixer.clipAction( object.animations[ 0 ] );
action.play();
scene.add( object );
}
var true_load = load_init.bind(this);
console.log("printing objects...");
loader.load( 'Anims/Capoeira.fbx', true_load);
console.log(objs);//seems to have things there
console.log(objs[0]);//prints undefined
添加 object 成功,我可以看到动画正在播放。
问题是:我需要访问加载到场景的 object 并弄乱它的变量(主要是 material 阴影和颜色)。
当我执行 console.log(scene.children)
时,我可以看到它打印了所有 children。总共有 4 个(一个灯,一个地面,一个网格助手和加载的 object)。但是,当我打印长度时,它只会说有 3 个 object,如果我尝试直接通过 children 数组或通过获取 [=23] 来访问加载的 object =] 按 ID 或名称,我将得到未定义。我还尝试将函数更改为 return 已加载的 object,甚至设置了一个名为 loaded_object 的变量,但我也会保留该函数。
考虑使用 THREE.LoadingManager
。这些问题很可能是由于 loader.load
方法的异步性质造成的。
在THREE.LoadingManager.onLoad
方法中,您应该能够正确访问所有内容。
按照 threejs.org FBX 加载器示例,我让我的模型加载了这个函数:
this.obj = null;
var loader = new THREE.FBXLoader();
var objs = []
function load_init( object ) {
mixer = new THREE.AnimationMixer( object );
console.log("pushing to objs...");
objs.push(object);
console.log(objs[0]);
object.traverse( function ( child ) {
if ( child.isMesh ) {
//console.log(child)
//console.log(child.material.length)
const oldMat = child.material;
var newMat = new THREE.MeshBasicMaterial();
// if(oldMat.length == undefined)
// {
// console.log(newMat.copy(oldMat));
// child.material = newMat;
// child.material = new THREE.MeshBasicMaterial( {
// color: oldMat.color,
// } );
// }
// else
// {
// for(var i = 0; i < oldMat.length; i++)
// {
// child.material[i] = new THREE.MeshBasicMaterial( {
// color: oldMat[i].color,
// } );
// }
// }
}
} );
object.position.z -= 200;
object.position.y -= 250;
var action = mixer.clipAction( object.animations[ 0 ] );
action.play();
scene.add( object );
}
var true_load = load_init.bind(this);
console.log("printing objects...");
loader.load( 'Anims/Capoeira.fbx', true_load);
console.log(objs);//seems to have things there
console.log(objs[0]);//prints undefined
添加 object 成功,我可以看到动画正在播放。
问题是:我需要访问加载到场景的 object 并弄乱它的变量(主要是 material 阴影和颜色)。
当我执行 console.log(scene.children)
时,我可以看到它打印了所有 children。总共有 4 个(一个灯,一个地面,一个网格助手和加载的 object)。但是,当我打印长度时,它只会说有 3 个 object,如果我尝试直接通过 children 数组或通过获取 [=23] 来访问加载的 object =] 按 ID 或名称,我将得到未定义。我还尝试将函数更改为 return 已加载的 object,甚至设置了一个名为 loaded_object 的变量,但我也会保留该函数。
考虑使用 THREE.LoadingManager
。这些问题很可能是由于 loader.load
方法的异步性质造成的。
在THREE.LoadingManager.onLoad
方法中,您应该能够正确访问所有内容。