Three.js - 在场景中加载多种文件格式

时间:2017-05-17 08:37:06

标签: javascript three.js

在我的项目中,我想实现一个将3D对象加载到ThreeJS的函数。 3D对象来自用户在网站上上传的文件。该文件可以采用多种格式(STL,JSON,Babylon,Collada,......)。

到目前为止,我只能加载一种文件格式,如下所示:

// BEGIN Clara.io JSON loader code
var objectLoader = new THREE.ObjectLoader();
objectLoader.load('clara.json', function(obj) {
    object = new THREE.Mesh(obj);
    scene.add( object );
});

ThreeJS(或任何代码)中是否有任何方法根据给定的文件自动将3D对象加载到场景中?

2 个答案:

答案 0 :(得分:1)

我只想使用文件字符串找出正确的加载器 -

所以你有一些功能:

loadArbitraryModel("path/to/file.json");

loadArbitraryModel = function(path) {
    var strings = path.split('.'); //now the path is ["path/to/file", "json"]
    var types = ['json', 'obj', 'stl', 'babylon', 'collada'];
    var result = -1;
    types.forEach(function (item,index) {
        if (strings.length > 1) {
            if (strings[1] == item){ //strings[1] would be anything after the '.'
                result = index;
            }
        }
    });
    switch (result){
        case -1:
            alert("file format not supported/ improperly named");
        case 0:
            loadJSON(path);
            break;
        case 1:
            loadOBJ(path);
            break;
        case 3:
            loadSTL(path);
            break;
            //ETC etc etc
    }
}

其中loadXXX为每种文件类型定义了多次。或者你可以有一个load(loader,path)类型的函数 - 你传递它应该使用的加载器。即案例json - > load(new THREE.ObjectLoader(),path)。我认为所有加载器的工作方式都相同,function load( __, __)的内容对于所有情况都是相同的。这可以帮助您避免在多个函数中重复自己。

这并不能解释人们弄乱并给出错误的扩展,但我认为这是一个好的限制,并且在loadXXX()函数中,你可以定义onError函数来抛出一个如果加载程序无法解析它,则发出警报。

答案 1 :(得分:1)

我建议你看看codethree.js editor 如您所见,您必须包含所需的所有加载器,并根据文件扩展名编写一个大switch代码来使用正确的加载器

enter image description here