我使用clara.io以ThreeJS Object格式导出一个带有四个纹理的模型。它会生成一个.json文件。我正在尝试加载它并正确显示它。如果我执行以下操作(直接从clara.io导出帮助中获取),它会加载并显示但没有纹理:
var loader = new THREE.ObjectLoader();
loader.load( "wsc3.json", function(obj){
scene.add(obj);
});
我发现的一件事是,在使用不同类型的加载器时,应该可以将加载的对象转换为THREE.Mesh,获取纹理,然后将它们应用于网格。我有一个有效的例子:
loader = new THREE.JSONLoader();
loader.load("wsc3.js", function(geometry, materials){
// get the materials loaded from the file
var materialsFromFile = new THREE.MeshFaceMaterial(materials);
// create our mesh with the loaded geometry and materials
mesh = new THREE.Mesh(geometry, materialsFromFile);
scene.add(mesh);
});
使用JSONLoader的问题是我导出的模型有子部分,当导出JSONLoader使用的.js文件时,它会丢失模型层次结构(我检查了.js文件本身而没有子部分在那里。它只是一个巨大的顶点列表)。如果我看一下clara.io导出的.json文件,我可以看到列出的各个子部分,所以我猜我需要使用这种格式。
我环顾四周,看到有人建议从ObjectLoader生成的obj创建一个新网格。像这样:
var loader = new THREE.ObjectLoader();
loader.load( "wsc3.json", function(obj){
// get the geometry from the obj
var geometry = obj.geometry;
// get the materials from the obj
var materials = obj.materials;
mesh = new THREE.Mesh(geometry, materials);
scene.add(mesh);
});
不幸的是,这不起作用。什么都没有显示。我无法弄清楚我做错了什么。是否存在Three.js将加载的格式,这不仅会带来纹理,还会带来层次结构?