如何在Three.js中返回对象,而不是将其添加到场景中? (FBXLoader)

时间:2018-12-17 22:08:56

标签: javascript function three.js

如果我使用Javascript调用此函数,它将起作用,并将对象添加到场景:

var loader = new THREE.FBXLoader();

function returnFBX(PATH, scene) {
    loader.load('obj/' + PATH + '.fbx', function (object) {
        scene.add(object);
    });
}

但是,如果我替换:

scene.add(object);

具有:

return object;

似乎返回未定义。

我尝试使用Promises以及“加载管理器”,但两者似乎只能将对象添加到场景中,而不能返回对象。

我认为这是因为彼此之间有两个嵌套函数,并且加载是异步的。但是我不确定如何解决此问题,因为这是加载对象的标准方法。

1 个答案:

答案 0 :(得分:2)

load是异步的-使用回调或使用等待,即

const afterload = object => { console.log(object); }

function returnFBX(PATH, scene) {
    loader.load('obj/' + PATH + '.fbx', function (object) {
        afterload(object);
    });
}

async function returnFBX(PATH, scene) {
    return loader.load('obj/' + PATH + '.fbx', function (object) {
        return object;
    });
}

let afterloadObject = await returnFBX( ... )