Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Three.js-在场景中加载多个文件格式_Javascript_Three.js - Fatal编程技术网

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

Javascript Three.js-在场景中加载多个文件格式,javascript,three.js,Javascript,Three.js,在我的项目中,我想实现一个将3D对象加载到ThreeJS中的函数。3D对象来自用户上传到网站上的文件。该文件可以采用多种格式(STL、JSON、巴比伦、Collada等) 到目前为止,我只能加载一种文件格式,如下所示: // BEGIN Clara.io JSON loader code var objectLoader = new THREE.ObjectLoader(); objectLoader.load('clara.json', function(obj) { object =

在我的项目中,我想实现一个将3D对象加载到ThreeJS中的函数。3D对象来自用户上传到网站上的文件。该文件可以采用多种格式(STL、JSON、巴比伦、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对象加载到场景中?

我会使用文件字符串找出正确的加载程序-

所以你有一些功能,比如:

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)
type函数,在这里您可以传递它应该使用的加载程序。ie case json->
加载(新的三个.ObjectLoader(),路径)
。我认为所有加载程序的工作方式都非常相似,因此
函数加载(_uu,_u)
在所有情况下都是相同的。这将帮助您避免在多个函数中重复自己的操作


这并不能解释人们把事情搞得一团糟并给它错误的扩展名,但我认为这是一个可以接受的限制,在loadXXX()函数中,您可以定义onError函数,以便在加载程序无法解析它时抛出警报。

我只需要使用文件字符串来找出正确的加载程序-

所以你有一些功能,比如:

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)
type函数,在这里您可以传递它应该使用的加载程序。ie case json->
加载(新的三个.ObjectLoader(),路径)
。我认为所有加载程序的工作方式都非常相似,因此
函数加载(_uu,_u)
在所有情况下都是相同的。这将帮助您避免在多个函数中重复自己的操作


这并不能解释人们把事情弄得一团糟并给它错误的扩展名,但我认为这是一个可以接受的限制,在loadXXX()函数中,您可以定义onError函数,以便在加载程序无法解析它时抛出警报。

我建议您看看 正如您所看到的,您必须包含所有需要的加载程序,并根据文件扩展名编写一个大的
开关来使用正确的加载程序


我建议您看一下 正如您所看到的,您必须包含所有需要的加载程序,并根据文件扩展名编写一个大的
开关来使用正确的加载程序


谢谢!对于其他文件,包含代码的文件是index.html和/js/Loader.js谢谢!对于其他文件,包含代码的文件是index.html和/js/Loader.js