我已将模型导出为Three.js场景。我使用ObjectLoader加载它。它似乎加载很好,但纹理不适用。当我查看json文件时,列出了材料。这是我试过的代码。
loader.load( "MyModel.json", function(obj){
var materialsFromFile = new THREE.MeshFaceMaterial(obj.materials);
// create our mesh with the loaded geometry and materials
mesh = new THREE.Mesh(obj.geometry, materialsFromFile);
scene.add(mesh);
});
更新: 我有一个解决方案,也许有人知道更好的方法吗?我所做的是:首先我在加载模型后遍历模型
obj.traverse(function(child){ initChild(child); });
在initChild(child)中我这样做:
if(child.material != null)
{
var childName = child.material.name;
child.material = new THREE.MeshPhongMaterial();
child.material.name = childName;
AssignMap(child.material);
}
在AssignMap(材质)中,我首先加载纹理,然后根据材质名称指定它们:
var texture_metal = new THREE.ImageUtils.loadTexture("media/texture_metal.jpg");
var texture_glass = new THREE.ImageUtils.loadTexture("media/texture_glass.jpg");
if(material.name == "metal texture")
material.map = texture_metal;
if(material.name == "glass texture")
material.map = texture_glass;
我疯了吗?这是合理的解决方案吗?我已经看了很多,并且在使用THREE.ObjectLoader()和获取多个纹理以正确加载方面找不到多少。