Javascript three.js-如何在加载程序外选择网格?
我想更改网格的材质,我可以在的网格加载器中轻松完成。但是,一旦加载程序完成,我就不能再从外部函数访问它了。这一定是一个范围问题,我还没有弄清楚 这是可行的,但我不能这样使用:Javascript three.js-如何在加载程序外选择网格?,javascript,three.js,scope,Javascript,Three.js,Scope,我想更改网格的材质,我可以在的网格加载器中轻松完成。但是,一旦加载程序完成,我就不能再从外部函数访问它了。这一定是一个范围问题,我还没有弄清楚 这是可行的,但我不能这样使用: var loader = new THREE.GLTFLoader(); loader.load('model.glb', function (gltf) { scene.add(gltf.scene); // Material changed below var newMat = new
var loader = new THREE.GLTFLoader();
loader.load('model.glb', function (gltf) {
scene.add(gltf.scene);
// Material changed below
var newMat = new THREE.TextureLoader().load(something.jpg);
gltf.scene.traverse(function (node) {
node.material = newMat;
});
});
这不是。我怎样才能修好它
错误为“未定义gltf”
错误为“未定义gltf”
这是因为gltf仅在onLoad回调中有效。通过将gltf.scene指定给在更高范围内声明的类似变量的模型,可以轻松避免运行时错误
var model;
var loader = new THREE.GLTFLoader();
loader.load('model.glb', function (gltf) {
scene.add(gltf.scene);
model = gltf.scene;
});
function textureSwap(){
var newMat = new THREE.TextureLoader().load(something.jpg);
model.traverse(function (node) {
node.material = newMat;
});
}
您必须确保仅在加载过程完成后调用textureSwap。要使函数更健壮,可以执行以下操作:
function textureSwap(){
if ( model ) {
var newMat = new THREE.TextureLoader().load(something.jpg);
model.traverse(function (node) {
node.material = newMat;
});
}
}
function textureSwap(){
if ( model ) {
var newMat = new THREE.TextureLoader().load(something.jpg);
model.traverse(function (node) {
node.material = newMat;
});
}
}