返回加载的GLTF对象,然后将其添加到场景中

时间:2019-12-06 04:00:21

标签: javascript three.js 3d javascript-objects gltf

我一直在尝试各种方法来做这样的事情: 我想加载一个模型,然后让函数返回它

var loader = new THREE.GLTFLoader();
loader.crossOrigin = true;

var loadedModel = loader.load('model.gltf', function (data) {
    var object = data.scene;
    return object;
}

然后调用另一个函数并传递loadedModel

loadToScene(loadedModel);

此外,我希望它可以多次加载到场景中: 让我们在这里进行两次硬编码:

function loadToScene(model){
model.position.set(0,0,0);
scene.add(model);
model.position.set(0,0,5);
scene.add(model);
}

data.scene的范围结束后,我找不到保留loader的方法。 有什么办法可以实现?

1 个答案:

答案 0 :(得分:0)

要在加载.gltf文件后调用loadToScene,需要在回调函数内部内进行:

var loader = new THREE.GLTFLoader();
loader.crossOrigin = true;

loader.load('model.gltf', function (data) {
    var object = data.scene;

    // Use loadToScene function *inside* the callback
    // since we don't know when it will finish loading
    loadToScene(object);
}

要将模型两次添加到场景中,您需要首先clone it。否则,将同一对象两次添加到场景中将不会执行任何操作:

function loadToScene(model){
    // Add original object
    model.position.set(0,0,0);
    scene.add(model);

    // Clone a copy
    var model2 = model.clone(true);
    model2.position.set(0,0,5);
    scene.add(model2);
}