1

我有一些.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函数之前。当我这样做时,控制台中会出现一些警告,但纹理仍然没有出现。 在此处输入图像描述

在我看到的所有示例中,使用 OBJLoader 和 MTLLoader 时会自动加载纹理,但我没有使用带有 TGA 纹理的 OBJLoader 和 MTLLoader 的任何示例。所以我想知道是否有什么事情可以让它发挥作用。

任何帮助,将不胜感激。

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

4

2 回答 2

0

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

有关示例,请参见webgl_materials_texture_tga源。

您使用 .tga 纹理而不是 .png 是否有原因?在大多数情况下,它们会给出相同的结果,并且 .png 通常会更小,并且可以由浏览器本地解码,因此您将获得更好的性能。

于 2017-02-04T18:44:24.537 回答
-2

如果文件的数量不是很大:改变mtl文件的内容,把'tga'变成'jpg',然后我用photoshop把每个tga文件都变成jpg文件。

于 2017-02-04T15:02:40.520 回答