【发布时间】:2016-12-14 11:56:14
【问题描述】:
我导出了一些.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 导出的。
【问题讨论】:
-
MTLLoader 使用 TextureLoader 类来加载图片,afaik 不支持 TGA 图片(这也解释了为什么有一个特定的类来加载 TGA 图片)