three.js:MTLLoader不加载tga纹理

时间:2016-08-08 16:00:37

标签: three.js tga

我导出了一些.obj个文件和相应的.mtl个文件。纹理在.tga格式的同一文件夹中。

以下是我用来加载.obj的所有代码:

function addCar(modelPath, modelName) {
  var mtlLoader = new THREE.MTLLoader();
  mtlLoader.setPath(modelPath);

  for (var i = 0; i <= 2; i++) {
    loadObject(mtlLoader, modelPath, modelName, i);
  }
}

function loadObject(loader, path, name, i) {
  var objectName = name + i + '.obj';

  loader.load(name + i + '.mtl', function (materials) {
    materials.preload();

    var objLoader = new THREE.OBJLoader();
    objLoader.setMaterials(materials);
    objLoader.setPath(path);
    objLoader.load(objectName, function (object) {
      scene.add(object);
    }, function (xhr) {
      onProgress(xhr, objectName)
    }, onError);
  });
}

汽车已加载,但不是纹理。它看起来都是白色的,控制台中没有错误。我试着添加

  mtlLoader.setTexturePath(modelPath);

但它没有改变任何东西。

我也尝试添加

THREE.Loader.Handlers.add( /\.tga$/i, new THREE.TGALoader() );

之前调用addCar函数。当我这样做时,控制台中会出现一些警告,但纹理仍然没有出现。 enter image description here

在我看到的所有示例中,使用OBJLoader和MTLLoader时会自动加载纹理,但我没有使用带有TGA纹理的OBJLoader和MTLLoader的任何示例。所以我想知道是否有办法让它运作起来。

任何帮助都将不胜感激。

PS:文件(.obj.mtl.tga)从3D max导出。

2 个答案:

答案 0 :(得分:0)

您必须使用TGALoader加载.tga文件。你可以找到它here

有关示例,请参阅webgl_materials_texture_tga来源。

你有没有理由使用.tga纹理代替.png?在大多数情况下,它们会给出相同的结果,而.png通常会更小,并且可以通过浏览器进行本机解码,以便您获得更好的性能。

答案 1 :(得分:-1)

如果文件数量不是很大:更改mtl文件的内容,制作&#39; tga&#39;到了&#39; jpg&#39;,然后我使用photoshop将每个tga文件转换为jpg文件。