Three.js纹理未加载-是什么原因导致的?

时间:2018-09-10 18:14:05

标签: javascript 3d

我正在尝试使用从Blender导出的.obj和.mtl文件创建场景。该对象实际上只是一个矩形(它必须是一个.obj文件。将添加更多对象以创建场景),我能够看到材质负载,但看不到在chrome或firefox中应用的纹理。

the mtl file text

the obj file text

这是JavaScript代码:

seriestest2.fillna(value=0).rolling(window=3).quantile(.5)

project file structure

检查控制台,对mtl,obj和图像文件的请求返回200状态代码

but the model renders without texture

控制台中完全没有错误。是什么原因导致Three.js中出现此问题?我怀疑.obj或.mtl出问题了,但是我找不到问题。 (根据记录的ajax请求,文件路径正确)。

1 个答案:

答案 0 :(得分:0)

这可能是由于未在物料加载回调中返回的.preload()对象上调用materials方法。 preload()方法基本上创建MTLLoader加载的材质对象。

考虑以下更新,并添加此方法调用:

const mtl_loader = new THREE.MTLLoader();    
mtl_loader.setTexturePath('bar/');
mtl_loader.setPath('bar/');
mtl_loader.load('floor.mtl', function(materials) {

  // Add this (see link below for more detail)
  materials.preload()

  const obj_loader = new THREE.OBJLoader();
  obj_loader.setMaterials(materials);
  obj_loader.setPath('bar/');
  obj_loader.load('floor.obj', function(object) {

    scene.add(object);  
  })
});

Here is a link到三个源代码,其中显示了.preload()的内部工作原理-希望对您有所帮助!