Javascript Three.js-在场景中加载多个文件格式
在我的项目中,我想实现一个将3D对象加载到ThreeJS中的函数。3D对象来自用户上传到网站上的文件。该文件可以采用多种格式(STL、JSON、巴比伦、Collada等) 到目前为止,我只能加载一种文件格式,如下所示: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 =
// 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