在我的项目中,我想实现一个将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对象加载到场景中?
答案 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)
我建议你看看code的three.js editor
如您所见,您必须包含所需的所有加载器,并根据文件扩展名编写一个大switch
代码来使用正确的加载器